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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With