>  기사  >  백엔드 개발  >  Go 조건문에서 '변수가 선언되지 않음' 오류가 발생하는 이유는 무엇입니까?

Go 조건문에서 '변수가 선언되지 않음' 오류가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-26 11:44:10858검색

Why Am I Getting

조건문의 변수 선언 오류: "변수가 선언되지 않음" 문제 해결

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는 두 번 선언됩니다. 한 번은 내부 블록 외부에, 한 번은 내부 블록 안에 있습니다. 내부 선언은 별도의 범위를 생성하며 블록 내부의 값은 외부 범위에 표시되지 않습니다.

조건문 외부에서 변수 선언

오류가 발생하면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.