我有一个修改我的配置文件的 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
有效,但来自不同的包,而不是主包,但是当我尝试从主包中放置锁时会抛出相同的错误。请帮助我找出我在这里做错了什么。