기본 구조체 값
Go에서는 구조체 선언 중에 초기화되지 않은 구조체의 필드에 기본값이 할당됩니다. int와 같은 기본 유형의 경우 이 기본값은 0입니다. 그러나 이 값이 명시적으로 설정되었는지 아니면 기본값인지 확인하는 것은 문제가 될 수 있습니다.
차이가 있습니까?
안타깝게도 Go에서는 필드 설정 여부를 추적하지 않습니다. 따라서 0으로 초기화된 필드와 전혀 설정되지 않은 필드를 구분할 방법이 없습니다.
해결 방법
1. 포인터 사용:
포인터를 사용하면 nil 0 값을 활용할 수 있습니다. 포인터가 nil이면 설정되지 않았다는 뜻입니다.
type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} fmt.Println("testIntOne set:", s.testIntOne != nil) fmt.Println("testIntTwo set:", s.testIntTwo != nil) }
2. 메소드 사용:
필드를 설정하고 설정 여부를 추적하는 메소드를 정의할 수도 있습니다.
type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func (t *test) SetTwo(i int) { t.testIntTwo, t.twoSet = i, true } func main() { s := test{} s.SetOne(0) fmt.Println("testIntOne set:", s.oneSet) fmt.Println("testIntTwo set:", s.twoSet) }
위 내용은 Go 구조체에서 기본 값과 명시적으로 설정된 0 값을 어떻게 구별할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!