我有一个使用
argparse的
golang
项目,它采用不需要的文件作为参数。该文件是通过“文件标志”检索的,该标志可能正在为文件分配一些内存。代码:
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()
if !argparse.IsNilFile(myFile) {
fmt.Println(myFile)
myFile.Stat()
}
这是必要的,因为
File
函数返回一个指向空
os.File
对象的指针,并且由于您已将标记标记为可选,因此如果您不在命令行。 Stat
显然不适用于空的 os.File
对象,这就是为什么你得到无效的内存地址。