我有一个修改我的配置文件的 go 程序。我试图从 main() 函数中创建一个文件锁,但它抛出了一个panic: runtime error: invalid memory address or nil pointer dereference错误。没有锁,程序按预期工作正常。抛出异常的那段代码是
lockProgram, err := os.Create("/var/.daemon.lock")
defer lockProgram.Close()
CheckForError(err)
GetLock(lockProgram, syscall.LOCK_EX)
defer UngetLock(lockProgram)
//这是在一个单独的包中
func CheckForError(e error) {
if e != nil {
Error.Println(e)
panic(e)
}
}
func GetLock(file *os.File, locktype int ) {
fmt.Println("Acquiring lock on ", file.Name())
syscall.Flock(int(file.Fd()), locktype)
fmt.Println("Acquired filelock on ", file.Name())
}
func UngetLock(file *os.File) {
syscall.Flock(int(file.Fd()), syscall.LOCK_UN);
}
flock当我在我的配置文件上调用它时,这同样有效,但是来自不同的包,而不是主包,但是当我尝试从主包中放置锁时会抛出相同的错误。请帮我找出我在这里做错了什么。
米琪卡哇伊
相关分类