오류 변수를 전역적으로 초기화하려고 할 때 일부 사용자는 다음 함수 내에서 변수가 nil로 유지되는 당황스러운 문제에 직면할 수 있습니다. 동일한 패키지로 인해 예기치 않은 프로그램 동작이 발생합니다. 이 문제는 Go에서 전역 변수가 초기화되는 방식에서 발생합니다.
다음 예의 목표는 전역 오류 변수 loadErr을 초기화하고 다른 함수 checkErr()에서 오류를 확인하는 것입니다.
package main import ( "os" "fmt" ) var loadErr error func main() { f, loadErr := os.Open("asdasd") if loadErr != nil { checkErr() } if f != nil { fmt.Println(f.Name()) } } // panic won't be called because loadErr is nil func checkErr() { if loadErr != nil { panic(loadErr) } }
그러나 문제는 checkErr()이 loadErr에 대해 nil 값을 수신하기 때문에 발생합니다. 이는 main()에서 생성된 변수("loadErr := os.Open('asdasd')")가 main() 내 로컬 변수이고, 이 시점에서는 전역 변수가 초기화되지 않았기 때문입니다.
이 문제를 해결하려면 전역 변수에 값을 할당할 때 선언 및 초기화(":=") 대신 간단한 할당("=")을 사용해야 합니다. 변수:
// ... func main() { _, loadErr = os.Open("asdasd") // ^ Replaced := with = if loadErr != nil { checkErr() } // ... }
"=" 연산자를 사용하면 전역 변수 loadErr`에 오류 값이 명시적으로 할당되어 패키지 내의 다른 함수에 액세스할 수 있습니다.
위 내용은 내 Go 전역 오류 변수가 초기화 후에도 Nil로 유지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!