go - os.OpenFile权限问题测试

我目前遇到os.OpenFile问题。当我运行Go测试时,它只会使我“权限被拒绝”。

type log struct {
    Message   string
    Source    string
    Timestamp time.Time
    ErrorCode ErrorCode
}

type ErrorCode int

const (
    Info ErrorCode = 1 + iota
    Warning
    Error
)

func (errorCode ErrorCode) String() string {
    switch errorCode {
    case Info:
            return "Info"
    case Warning:
            return "Warning"
    case Error:
            return "Error"
    }
    return "Type not found"
}

func writeToLog(logItem log) {
    err := os.Chdir("..")
    if err != nil {
            fmt.Println("Can't change working directory")
    }
    err = os.Mkdir("logs", os.FileMode(0777))
    if err != nil && os.IsNotExist(err) {
            fmt.Println("Can't create log directory")
    }
    f, err := os.OpenFile("logs/log.txt",
            os.O_WRONLY|os.O_CREATE|os.O_APPEND, os.FileMode(0666))
    if err != nil {
            fmt.Println("Can't find logfile")
            fmt.Println(err)
    }
    defer f.Sync()
    defer f.Close()

    f.WriteString(logItem.ErrorCode.String() + logItem.Source +
            logItem.Message + logItem.Timestamp.String())
}

输出:
Can't find logfile
open logs/log.txt: permission denied
Can't find logfile
open logs/log.txt: permission denied

我做错了什么?似乎OpenFile没有正确设置我的权限(-rw-r--r--)。

提前致谢

最佳答案

所以我能够解决这个问题。

os.Chdir("..")

被一遍又一遍地叫。而且很明显,当前的工作目录已存储,并且不会更改为完成功能后的状态。

删除后,一切正常。我只是将 ../添加到 os.Mkdiros.OpenFile中。

我想与环境变量一起使用,以使此工作更好。