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

Go グローバル エラー変数が初期化後に nil のままになるのはなぜですか?

Susan Sarandon
リリース: 2024-12-11 19:10:16
オリジナル
502 人が閲覧しました

Why Does My Go Global Error Variable Remain Nil After Initialization?

初期化後にグローバル エラー変数が nil のままになる

エラー変数をグローバルに初期化しようとすると、一部のユーザーは、変数が後続の関数で 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)
    }
}
ログイン後にコピー
ただし、checkErr() がloadErr の nil 値を受け取るために問題が発生します。これは、main() で作成された変数 ("loadErr := os.Open('asdasd')") が main() 内のローカル変数であり、この時点ではグローバル変数が初期化されていないためです。

この問題を解決するには、グローバルに値を割り当てるときに、宣言と初期化 (":=") の代わりに単純な代入 ("=") を使用する必要があります。変数:

// ...

func main() {
    _, loadErr = os.Open("asdasd")
    // ^ Replaced := with =
    if loadErr != nil {
        checkErr()
    }
    // ...
}
ログイン後にコピー
「=」演算子を使用すると、グローバル変数loadErr`にエラー値が明示的に割り当てられ、パッケージ内の他の関数から確実にアクセスできるようになります。

以上がGo グローバル エラー変数が初期化後に nil のままになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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