初始化后,全局错误变量保持为零 [英] global error variable remains nil after initialization
问题描述
当我全局初始化一个错误变量时,它似乎对同一包中的另一个函数无效.
我不明白为什么这段代码没有引起恐慌?
程序包主要进口 ("os""fmt")var loadErr错误func main(){f,loadErr:= os.Open("asdasd")如果loadErr!= nil {checkErr()}如果f!= nil {fmt.Println(f.Name())}}//因为loadErr为nil,所以不会调用panicfunc checkErr(){如果loadErr!= nil {恐慌(loadErr)}}
但是当我这样做时,它似乎按预期工作了?
程序包主要进口 ("os")var loadErr错误func main(){_,err:= os.Open("asdasd")loadErr = err如果loadErr!= nil {checkErr()}}//恐慌将按预期方式被调用func checkErr(){如果loadErr!= nil {恐慌(loadErr)}}
func main(){_,loadErr:= os.Open("asdasd")
您创建一个新的本地变量 loadErr
,但永远不会设置全局变量.仅使用 =
,而不使用:=
来使用全局变量.
也要保留第二个值,您必须预先声明第二个变量:
var f * os.Filef,loadErr = os.Open("asdasd")
不幸的是,您不能在此处使用:=
,因为:=
不会考虑非局部变量,在这种情况下只会创建局部变量.>
When I initialize an error variable globally it seems that it's nil to another function in the same package.
I don't understand why is this code not panicing?
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)
}
}
But when I do this, it seems to work as expected?
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")
You create a new, local variable loadErr
, the global one is never set. Use just =
, not :=
, to use the global one.
Edit: To hold the second value too, you have to predeclare the second variable:
var f *os.File
f, loadErr = os.Open("asdasd")
Unfortunately, you can't use :=
here, as :=
will not consider non-local variables and just create a local variable in this case.
这篇关于初始化后,全局错误变量保持为零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!