Oleiade'ye ek olarak , sıfır değerler hakkındaki spesifikasyona bakın :
Bellek bir değeri saklamak için bir bildirim veya marka oluşturma veya yeni çağrı ile ayrıldığında ve açık başlatma yapılmadığında, belleğe varsayılan başlatma verilir. Böyle bir değerin her elemanı, türü için sıfır değerine ayarlanır: booleans için false, tamsayılar için 0, kayanlar için 0.0, dizeler için "" ve işaretçiler, işlevler, arabirimler, dilimler, kanallar ve haritalar için sıfır. Bu başlatma yinelemeli olarak yapılır, bu nedenle örneğin bir yapı dizisinin her bir öğesinin herhangi bir değer belirtilmezse alanları sıfırlanır.
Gördüğünüz gibi, nil
her tür için sıfır değeri değil, yalnızca işaretçiler, işlevler, arabirimler, dilimler, kanallar ve haritalar için. Bu config == nil
bir hatadır ve
&config == nil
olmamasının sebebidir .
Senin yapı (örneğin onun tekabül eden sıfır değeri için her üyeyi kontrol etmek olurdu başlatılmamış olup olmadığını kontrol etmek için host == ""
, port == 0
vs.) ya da bir iç başlatma yöntemi ile ayarlanır özel alan vardır. Misal:
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 }