Selain Oleiade, lihat spesifikasi pada nilai nol :
Ketika memori dialokasikan untuk menyimpan nilai, baik melalui deklarasi atau panggilan make atau baru, dan tidak ada inisialisasi eksplisit disediakan, memori diberikan inisialisasi default. Setiap elemen dari nilai tersebut diatur ke nilai nol untuk jenisnya: false untuk boolean, 0 untuk bilangan bulat, "0 untuk pelampung," "untuk string, dan nol untuk pointer, fungsi, antarmuka, irisan, saluran, dan peta. Inisialisasi ini dilakukan secara rekursif, jadi misalnya setiap elemen array array akan memiliki bidangnya nol jika tidak ada nilai yang ditentukan.
Seperti yang Anda lihat, nil
bukan nilai nol untuk setiap jenis tetapi hanya untuk pointer, fungsi, antarmuka, irisan, saluran dan peta. Ini adalah alasan mengapa config == nil
ada kesalahan dan
&config == nil
tidak.
Untuk memeriksa apakah struct Anda belum diinisialisasi, Anda harus memeriksa setiap anggota untuk nilai nol masing-masing (mis host == ""
. port == 0
, Dll.) Atau memiliki bidang pribadi yang ditetapkan oleh metode inisialisasi internal. Contoh:
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 }