全局错误变量初始化后仍为 Nil
问题
全局初始化错误变量时,它在同一包内的另一个函数中保持为零。这可以防止恐慌条件按预期触发。
package main import ( "os" "fmt" ) var loadErr error func main() { f, loadErr := os.Open("asdasd") if loadErr != nil { checkErr() } if f != nil { fmt.Println(f.Name()) } } // panic won't be called because loadErr is nil func checkErr() { if loadErr != nil { panic(loadErr) } }
回答
出现问题的原因是 main 函数中的变量 loadErr 是一个新的局部变量。全局变量永远不会被赋值。为了纠正这个问题,应该简化变量赋值:
func main() { _, loadErr = os.Open("asdasd")
通过使用 =,全局变量 loadErr 将被初始化,并且任何后续错误都将被正确传播。
其他注意事项
如果你想保存 os.Open 的返回值,你需要预声明第二个变量:
var f *os.File f, loadErr = os.Open("asdasd")
在这种情况下,不能使用 :=,因为它会创建局部变量并忽略全局变量。
以上是为什么我的全局初始化错误变量在另一个函数中保持为零?的详细内容。更多信息请关注PHP中文网其他相关文章!