条件文の変数宣言エラー: 「変数が宣言されていない」問題の解決
Go では、変数を宣言する前に変数を宣言する必要があります。使用済み。このルールは、if...else などの条件ステートメント内にも当てはまります。条件ブロック内で変数を宣言すると、これまでに遭遇したように、エラーが発生する可能性があります。
Go の変数スコープを理解する
Go の変数にはスコープが制限されています。宣言されているブロック内でアクセスできます。例:
package main import "fmt" func main() { a := 1 fmt.Println(a) { a := 2 fmt.Println(a) } fmt.Println(a) }
このコードでは、変数 a が 2 回宣言されています。1 回目は内部ブロックの外側で、もう 1 回目は内部ブロック内です。内部宣言は別のスコープを作成し、ブロック内の a の値は外部スコープからは見えません。
条件付きステートメントの外での変数の宣言
エラーが発生した場合は、if...else ステートメントの外で変数 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) } }
この更新されたコードでは、req と er が条件ステートメントの外側で宣言され、if 分岐と else 分岐の両方内でアクセスできるようになります。これにより、発生していたコンパイル エラーが解決されます。
以上がGo の条件文で「変数が宣言されていません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。