【发布时间】:2019-10-11 20:49:25
【问题描述】:
有没有办法在 Go 中检查文件描述符是否有效(在初始打开操作之后)?
如果在命令行标志中指定,请考虑以下打开调试文件的代码片段
upstreamDebug := flag.String("upstream_debug", "", "File for debugging")
flag.Parse()
var upstreamDebugFile os.File
if *upstreamDebug != "" {
upstreamDebugFile, err := os.OpenFile(*upstreamDebug, os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
log.Println("writing to", upstreamDebugFile.Name())
defer upstreamDebugFile.Close()
}
到目前为止,一切都很好。但稍后我们希望写信给upstreamDebugFile,如果 & 仅当它是一个有效的描述符 - 在这个 if { .. } 子句之外。
有没有办法测试它的有效性? lib中似乎没有任何内置方法。与 nil 比较
if upstreamDebugFile == nil {
报错
cannot convert nil to type os.File
【问题讨论】:
-
应用程序声明了两个名为 upstreamDebugFile 的变量,这些变量具有不同的类型。通过将外部变量声明为 *os.File 并将内部范围中的短变量声明替换为赋值来修复。
-
谢谢!是的,我在那里遇到了范围错误;现在修复了。我将 upstreamDebugFile 值用作 io.WriteCloser。我发现它不等于 nil,即使文件没有设置。
-
golang.org/doc/faq#nil_error "只有当 V 和 T 都未设置时,接口值才为零"
-
发布minimal reproducible example。 cmets 提到了一个 io.WriteCloser,但问题中没有显示。