当我全局初始化一个错误变量时,它似乎对同一个包中的另一个函数是 nil。
我不明白为什么这段代码没有 panic ?
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)
}
}
但是当我这样做时,它似乎按预期工作?
package main
import (
"os"
)
var loadErr error
func main() {
_, err := os.Open("asdasd")
loadErr = err
if loadErr != nil {
checkErr()
}
}
// panic will be called as expected
func checkErr() {
if loadErr != nil {
panic(loadErr)
}
}
最佳答案
func main() {
_, loadErr := os.Open("asdasd")
您创建了一个新的本地 变量loadErr
,但从未设置全局变量。仅使用 =
,而不是 :=
,以使用全局代码。
编辑:要保存第二个值,您必须预先声明第二个变量:
var f *os.File
f, loadErr = os.Open("asdasd")
不幸的是,你不能在这里使用 :=
,因为 :=
不会考虑非局部变量,在这种情况下只会创建一个局部变量。
关于go - 全局错误变量在初始化后保持为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42780555/