如何判断Go argparse返回的*os.File是否已初始化

问题描述 投票:0回答:1

我有一个使用

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()

go pointers
1个回答
1
投票

if !argparse.IsNilFile(myFile) { fmt.Println(myFile) myFile.Stat() }

这是必要的,因为 
File

函数返回一个指向空

os.File
对象的指针,并且由于您已将标记标记为可选,因此如果您不在命令行。
Stat
显然不适用于空的
os.File
对象,这就是为什么你得到无效的内存地址。
    

© www.soinside.com 2019 - 2024. All rights reserved.