エラー変数をグローバルに初期化しようとすると、一部のユーザーは、変数が後続の関数で nil のままになるという不可解な問題に遭遇する可能性があります。同じパッケージを使用すると、予期しないプログラムの動作が発生します。この問題は、Go でのグローバル変数の初期化方法に起因します。
次の例の目的は、グローバル エラー変数loadErr を初期化し、別の関数 checkErr():
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) } }
// ... func main() { _, loadErr = os.Open("asdasd") // ^ Replaced := with = if loadErr != nil { checkErr() } // ... }
以上がGo グローバル エラー変数が初期化後に nil のままになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。