os.OpenFile関数を使用してosパッケージでログファイルを開こうとしています。しかし、それは無限のエラーを返します:そのようなファイルやディレクトリはありません。私はlinuxを使っていて、1.6へ行く。ログファイルのオープンはinit関数で行われます。 Heres私のコード:os.OpenFileでO_CREATEフラグを指定すると、このようなファイルやディレクトリはスローされません。
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()
}
ファイルパスがlogfile.txtというあります –
あなたのコードを実行しました。私が見ることができる問題は、あなたのconfig構造体にはエクスポートされていないフィールドしかない(小文字で始まる)ため、jsonパッケージはそれらを見ることができません。 –
ええ、すでに修復していることがわかったので、今すぐ動作しています。とにかく助けてくれてありがとう。 –