Go의 기본 구조체 값
Go에서는 int와 같은 기본 유형에 기본값이 있습니다. int의 경우 이 기본값은 0입니다. 그러나 수동으로 설정된 값 0과 기본값을 구별하기 어려울 수 있습니다.
다음 구조체를 고려하세요.
type test struct { testIntOne int testIntTwo int }
한 필드가 0으로 설정된 구조체를 생성하면 다른 필드가 설정되어 있는지 또는 여전히 기본값이 있는지 알 수 없습니다. 값:
package main import "log" func main() { s := test{testIntOne: 0} log.Println(s) }
솔루션
포인터 사용
한 가지 해결책은 필드에 포인터를 사용하는 것입니다. 포인터는 nil 값을 가지므로 필드가 설정되어 있는지 확인할 수 있습니다.
type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} log.Println(s.testIntOne != nil) // Output: true log.Println(s.testIntTwo != nil) // Output: false }
메서드 사용
또 다른 해결책은 다음과 같은 메서드를 만드는 것입니다. 필드를 설정하고 설정 여부를 추적합니다. 직접 액세스를 방지하려면 필드 자체를 내보내지 않아야 합니다.
type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func main() { s := test{} s.SetOne(0) log.Println(s.oneSet) // Output: true log.Println(s.twoSet) // Output: false }
위 내용은 Go 구조체에서 기본 값과 명시적으로 0 값을 설정하는 방법을 구별하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!