初期化後にグローバル エラー変数が Nil のままになる
問題
エラー変数をグローバルに初期化するとき、同じパッケージ内の別の関数では 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) } }
Answer
この問題は、メイン関数の変数loadErrが新しいローカル変数であるために発生します。 。グローバル変数には値が割り当てられることはありません。これを修正するには、変数の割り当てを簡素化する必要があります。
func main() { _, loadErr = os.Open("asdasd")
= を使用すると、グローバル変数loadErr が初期化され、後続のエラーはすべて正しく伝播されます。
その他の考慮事項
os.Open からの戻り値を保持したい場合は、以下が必要です。 2 番目の変数を事前宣言するには:
var f *os.File f, loadErr = os.Open("asdasd")
この場合、:= はローカル変数を作成し、グローバル変数を無視するため使用できません。
以上がグローバルに初期化されたエラー変数が別の関数で nil のままになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。