gpt4 book ai didi

go - 带有 O_CREATE 标志的 os.OpenFile 抛出没有这样的文件或目录

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:32 25 4
gpt4 key购买 nike

我正在尝试使用 os.OpenFile 函数打开带有 os 包的日志文件,如果此类文件不存在,它应该使用适当的标志创建文件。但它返回非零错误:没有这样的文件或目录。顺便说一句,我正在使用 linux 并使用 1.6。日志文件打开发生在 init 函数中。这是我的代码:

package main

import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"

"github.com/gorilla/mux"
"github.com/gorilla/sessions"
)

// Structs holds server configuration data from config json.
type serverConfiguration struct {
port string
logFileName string
sessionStorePhrase string
resourceFilesPath string
resourceFilesPathPrefix string
}

// Server global variables.
var (
serverConfig serverConfiguration
logFile *os.File
router *mux.Router
sessionStore *sessions.CookieStore
)

func init() {
// temporary variables.
var (
configFile *os.File
serverConfErr, configDecodingErr, logFileErr error
)

// Loads json config file.
configFile, serverConfErr = os.Open("server-conf.json")
defer configFile.Close()

if serverConfErr != nil {
log.Fatal("SERVER-CONFIG-ERROR: ", serverConfErr)
}

// Decodes json to serverConfig struct.
decoder := json.NewDecoder(configFile)
serverConfig = serverConfiguration{}
configDecodingErr = decoder.Decode(&serverConfig)

if configDecodingErr != nil {
log.Fatal("CONFIGURATION-DECODING-ERROR: ", configDecodingErr)
}

// Opens log file in app root directory.
logFile, logFileErr = os.OpenFile(serverConfig.logFileName, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)

if logFileErr != nil {
log.Fatal("LOG-FILE-ERROR: ", logFileErr)
}

// Creates session store.
sessionStore = sessions.NewCookieStore([]byte(serverConfig.sessionStorePhrase))
}

// Home page handler.
func homePageHandler(writer http.ResponseWriter, request *http.Request) {
fmt.Fprint(writer, "asdasdasdasd")
}

func main() {
defer logFile.Close()
router = mux.NewRouter().StrictSlash(false)
resourceFileServer := http.FileServer(http.Dir(serverConfig.resourceFilesPath))
router.PathPrefix(serverConfig.resourceFilesPathPrefix).Handler(http.StripPrefix(serverConfig.resourceFilesPathPrefix, resourceFileServer))

router.HandleFunc("/", homePageHandler)

server := &http.Server{
Addr: serverConfig.port,
Handler: router,
}

log.Println("Server listening on port ", serverConfig.port)
server.ListenAndServe()
}

最佳答案

错误很可能是您要在其中创建文件的路径不存在。它将创建日志文件,但如果父目录不存在则不会创建。要创建必要的目录结构,您可以使用 os.MkdirAll

关于go - 带有 O_CREATE 标志的 os.OpenFile 抛出没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38033557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com