ホームページ > バックエンド開発 > Golang > グローバルに初期化されたエラー変数が別の関数で nil のままになるのはなぜですか?

グローバルに初期化されたエラー変数が別の関数で nil のままになるのはなぜですか?

DDD
リリース: 2024-12-12 13:28:10
オリジナル
319 人が閲覧しました

Why Does My Globally Initialized Error Variable Remain Nil in Another Function?

初期化後にグローバル エラー変数が 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート