>백엔드 개발 >Golang >내 Go 전역 오류 변수가 초기화 후에도 Nil로 유지되는 이유는 무엇입니까?

내 Go 전역 오류 변수가 초기화 후에도 Nil로 유지되는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-11 19:10:16502검색

Why Does My Go Global Error Variable Remain Nil After Initialization?

초기화 후 전역 오류 변수가 Nil로 유지됨

오류 변수를 전역적으로 초기화하려고 할 때 일부 사용자는 다음 함수 내에서 변수가 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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