【发布时间】:2021-11-16 07:27:57
【问题描述】:
我有一个使用argparse 的golang 项目,它接受一个不需要的文件作为参数。使用File flag 检索文件,这可能会为文件分配一些内存。代码:
package main
import (
"fmt"
"log"
"os"
"github.com/akamensky/argparse"
)
func main() {
parser := argparse.NewParser("", "")
myFile := parser.File("", "file", os.O_RDONLY, 0444, &argparse.Options{Required: false})
if err := parser.Parse(os.Args); err != nil {
log.Fatalf("error at parsing: %v", err)
}
if myFile != nil {
fmt.Println(myFile)
myFile.Stat()
}
}
当我运行我的命令时,我的输出是
&{<nil>}
panic: runtime error: invalid memory address or nil pointer dereference
说我正在取消引用 nil 指针,但是当我检查指针是否为 nil 时,它说它不是,尽管 Println 返回一个值为 nil 的指针。
如何检查文件指针的内容是否为nil?
注意:错误来自 myFile.Stat()
【问题讨论】:
-
您应该首先检查
parser.Parse返回的错误。如果这不起作用,请显示一个最小的可重现示例和带有行号的堆栈跟踪。 -
parser.Parse不返回任何错误,错误来自myFile.Stat() -
可以,但你忽略了它。同样,我们需要一个可重现的例子。
-
添加了它,只是在这段代码中没有,而不是在原始代码中
-
当人们要求“可重现的示例”时,他们要求的是可以复制、粘贴和运行以重现问题的东西。我在您的问题中添加了缺失的部分,因为我对答案感兴趣。