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)
}
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…