Go 프로그램에서 오류 변수를 전역적으로 초기화하면 오류 변수가 0으로 유지되는 특이한 문제가 발생합니다. 동일한 패키지 내의 다른 기능. 이 수수께끼를 풀기 위해 구체적인 예를 살펴보겠습니다.
package main</p> <p>import (</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">"os" "fmt"
)
var loadErr 오류
func main() {
f, loadErr := os.Open("asdasd") if loadErr != nil { checkErr() } if f != nil { fmt.Println(f.Name()) }
}
// loadErr이 nil이므로 패닉이 호출되지 않습니다
func checkErr() {
if loadErr != nil { panic(loadErr) }
}
이 시나리오에서는 자연스럽게 코드가 파일을 열 수 없으면 패닉이 발생합니다. 그러나 기대와는 달리 loadErr 변수가 nil이기 때문에 침묵을 유지합니다. 이를 해결하려면 결정적인 구분이 필요합니다.
Go에서는 := 연산자를 사용하면 함수 범위 내에서 새로운 지역 변수가 생성됩니다. 이 경우,
f, loadErr := os.Open("asdasd")
줄은 기본적으로 loadErr이라는 지역 변수를 생성합니다. 전역적으로 선언된 변수에서. 불행하게도 전역 변수는 영향을 받지 않고 nil 값 문제로 이어집니다.
이 문제를 해결하려면 := 연산자를 표준 할당 연산자 =로 바꿔야 합니다. 이렇게 하면 전역 변수 loadErr이 os.Open()에서 반환된 값으로 참조되고 초기화됩니다.
func main() {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">_, loadErr = os.Open("asdasd")
이 미묘한 변경을 통해 전역 오류 변수가 올바르게 설정되고 패닉 기능이 이제 다음과 같이 작동합니다.
게다가 os.Open()에서 두 개의 반환 값이 필요한 경우 할당에 사용되는 두 번째 변수를 미리 명시적으로 선언해야 합니다.
var f *os .File<br>f, loadErr = os.Open("asdasd")<br>
위 내용은 Go에서 전역 오류 변수 초기화가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!