エラー変数をグローバルに初期化すると、同じパッケージ内の別の関数とは無関係に見えます。
なぜこのコードがパニングされていないのですか?Golangのグローバルエラー変数は、初期化後も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)
}
}
これを実行すると、期待どおりに動作しているようですか?
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)
}
}
を私はより明確にする私の質問を編集しました。私は最終的に使用する必要があります:=現実の状況では私もfを保持する必要があるので –
@ J.Goreyあなたの質問は何ですか?あなたは、グローバル変数をシャドウするローカル変数を作成しています。 – zerkms