Go の条件文内で宣言された変数にアクセスできないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-09 18:19:02
オリジナル
593 人が閲覧しました

Why Can't I Access Variables Declared Inside Conditional Statements in Go?

条件ステートメント内で宣言された変数

条件ステートメント (if.​​..else) 内で宣言された変数が宣言されないという問題が発生しました。認識された。これは、Go の変数には特定のスコープがあり、変数が宣言されているブロックによって定義されるためです。

変数スコープ

この例では、次のように宣言しています。条件文の分岐内の req と er。ただし、これは、これらの変数が特定のブランチ内でのみ表示されることを意味します。 Go では、使用するスコープ内で変数を宣言する必要があります。

解決策

この問題を解決するには、条件文の外側で req と er を宣言します。それらが関数全体で表示されること:

var req *http.Request
var er error

if strings.EqualFold(r.Method, "GET") || strings.EqualFold(r.Method, "") {
    req, er = http.NewRequest(r.Method, r.Uri, b)
} else {
    req, er = http.NewRequest(r.Method, r.Uri, b)
}

if er != nil {
    // we couldn't parse the URL.
    return nil, &Error{Err: er}
}

// add headers to the request
req.Host = r.Host
req.Header.Add("User-Agent", r.UserAgent)
req.Header.Add("Content-Type", r.ContentType)
req.Header.Add("Accept", r.Accept)
if r.headers != nil {
    for _, header := range r.headers {
        req.Header.Add(header.name, header.value)
    }
}
ログイン後にコピー

構文

Go における = と := の違いは重要です。 = は既存の変数に値を代入するために使用され、:= は同じ行で変数の宣言と代入に使用されます。

これは、= を使用して変数を宣言する場合は、すでに宣言している必要があることを意味します。同じスコープまたは親スコープ内にありますが、:= は 1 つのステートメントで変数の宣言と初期化を行います。

この場合、関数内に新しい変数を導入したいので、:=使用する適切な構文です。

以上がGo の条件文内で宣言された変数にアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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