Oleiade 외에도 제로 값에 대한 사양을 참조하십시오 .
선언 또는 make 또는 new 호출을 통해 값을 저장하기 위해 메모리가 할당되고 명시적인 초기화가 제공되지 않으면 메모리에 기본 초기화가 제공됩니다. 이러한 값의 각 요소는 해당 유형의 0 값으로 설정됩니다. 부울의 경우 false, 정수의 경우 0, 부동 소수점의 경우 0.0, 문자열의 경우 "", 포인터, 함수, 인터페이스, 슬라이스, 채널 및 맵의 경우 nil. 이 초기화는 재귀 적으로 수행되므로 예를 들어 값을 지정하지 않으면 구조체 배열의 각 요소에는 필드가 0이됩니다.
보시다시피, nil
모든 유형의 0 값이 아니라 포인터, 함수, 인터페이스, 슬라이스, 채널 및 맵의 경우에만 0입니다. 이것이 왜 config == nil
오류이고 &config == nil
그렇지 않은 이유 입니다
.
당신의 구조체가 (예를 들어, 당신은 각각의 제로 값에 대해 모든 구성원을 확인해야 할 것 초기화되지 않은되어 있는지 여부를 확인하려면 host == ""
, port == 0
등) 또는 내부 초기화 방법에 의해 설정되는 개인 필드가 있습니다. 예:
type Config struct {
Host string
Port float64
setup bool
}
func NewConfig(host string, port float64) *Config {
return &Config{host, port, true}
}
func (c *Config) Initialized() bool { return c != nil && c.setup }