>백엔드 개발 >Golang >Go의 조건문 내부에 선언된 변수에 액세스할 수 없는 이유는 무엇입니까?

Go의 조건문 내부에 선언된 변수에 액세스할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-09 18:19:02609검색

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에서 =와 :=의 차이점은 중요합니다. =는 기존 변수에 값을 할당할 때 사용하고, :=는 같은 줄에서 변수를 선언하고 할당할 때 사용합니다.

즉, =로 변수를 선언한다면 이미 변수를 선언해야 한다는 의미입니다. 동일한 범위 또는 상위 범위에 있는 반면 :=는 단일 문에서 변수를 선언하고 초기화합니다.

이 경우 함수 내에 새 변수를 도입하려고 하므로 :=가 적합합니다. 사용할 구문입니다.

위 내용은 Go의 조건문 내부에 선언된 변수에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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