=` Apabila Bidang Mereka Setanding? " />
Go Struct Comparison: Ralat Tidak Dijangka
Spesifikasi Bahasa Pengaturcaraan Go menyatakan bahawa struct dengan hanya medan yang setanding hendaklah setanding. Walau bagaimanapun, kod berikut gagal untuk susun:
type Student struct { Name string // "String values are comparable and ordered, lexically byte-wise." Score uint8 // "Integer values are comparable and ordered, in the usual way." } func main() { alice := Student{"Alice", 98} carol := Student{"Carol", 72} if alice >= carol { println("Alice >= Carol") } else { println("Alice < Carol") } }
Mesej ralat ialah:
operasi tidak sah: alice >= carol (operator >= tidak ditakrifkan pada struct)Ralat ini bercanggah dengan spesifikasi, kerana struct harus setanding jika medannya.
Penjelasan:
Sambil bidang daripada struct Pelajar boleh dibandingkan (menggunakan == dan !=), mereka tidak dipesan operator (<, <=, >, >=) hanya boleh digunakan pada operan yang dipesan, seperti. integer atau rentetan.
Spesifikasi Bahasa Pengaturcaraan Go dengan jelas menyatakan bahawa struct adalah setanding tetapi tidak dipesan:
Pengendali kesamaan == dan != digunakan untuk operan yang setanding.
...
- Nilai struktur adalah setanding jika semua medannya adalah setanding. Dua nilai struct adalah sama jika medan bukan kosong yang sepadan adalah sama.
Oleh itu, anda tidak boleh menggunakan >= untuk membandingkan struct Pelajar, walaupun medannya adalah setanding.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Bandingkan Go Structs dengan `>=` Apabila Bidangnya Setanding?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!