전역 오류 변수를 초기화할 때 동일한 패키지 내의 함수에 변경되지 않은 것처럼 나타날 수 있습니다. 이러한 불일치는 변수 범위 지정에 대한 오해로 인해 발생합니다.
첫 번째 예에서는 :=를 사용하여 기본 함수 내에서 f와 loadErr을 모두 초기화했습니다.
func main() { f, loadErr := os.Open("asdasd") if loadErr != nil { checkErr() } if f != nil { fmt.Println(f.Name()) } }
이 줄은 f와 loadErr에 대한 새로운 지역 변수를 생성합니다. 함수 외부에 정의된 전역 변수는 수정되지 않습니다. 따라서 checkErr()을 호출하면 loadErr은 기본 함수 범위 내에서 설정되지 않았기 때문에 여전히 nil입니다.
두 번째 예에서는 =를 사용하여 loadErr의 값을 os.Open()에서 반환된 오류로 설정합니다.
func main() { _, err := os.Open("asdasd") loadErr = err if loadErr != nil { checkErr() } }
=를 사용하면 명시적으로 로컬 err 변수의 값을 전역 loadErr 변수에 할당합니다. 이를 통해 checkErr() 함수가 수정된 전역 변수에 액세스하고 패닉을 유발할 수 있습니다.
실수로 전역 변수를 섀도잉하는 로컬 변수를 생성하는 것을 방지하려면 전역 변수를 선언하는 것이 중요합니다. 값을 할당하기 전에 명시적으로 첫 번째 예에서는 정의를 이동하여 기본 함수 외부에서 loadErr을 전역 변수로 선언할 수 있습니다.
var loadErr error func main() { _, loadErr = os.Open("asdasd") if loadErr != nil { checkErr() } if f != nil { fmt.Println(f.Name()) } }
이렇게 하면 프로그램 전체에서 전역 loadErr 변수에 액세스하고 업데이트할 수 있습니다.
위 내용은 Go에서 초기화 후 전역 오류 변수가 패닉을 일으키지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!