Nilai Struktur Lalai dalam Go
Dalam Go, jenis primitif seperti int mempunyai nilai lalai. Untuk int, nilai lalai ini ialah 0. Walau bagaimanapun, sukar untuk membezakan antara nilai 0 yang ditetapkan secara manual dan nilai lalai.
Pertimbangkan struct berikut:
type test struct { testIntOne int testIntTwo int }
Jika kita mencipta struct dengan satu medan ditetapkan kepada 0, kita tidak dapat mengetahui sama ada medan lain ditetapkan atau masih mempunyai lalainya nilai:
package main import "log" func main() { s := test{testIntOne: 0} log.Println(s) }
Penyelesaian
Menggunakan Penunjuk
Satu penyelesaian ialah menggunakan penunjuk untuk medan. Penunjuk mempunyai nilai sifar sifar, jadi kita boleh menyemak sama ada medan ditetapkan:
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 }
Menggunakan Kaedah
Penyelesaian lain ialah mencipta kaedah yang menetapkan medan dan menjejaki sama ada ia telah ditetapkan. Medan itu sendiri seharusnya tidak dieksport untuk menghalang akses terus:
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 }
Atas ialah kandungan terperinci Bagaimana Membezakan Antara Lalai dan Menetapkan Nilai Sifar Secara Eksplisit dalam Go Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!