Walaupun mematuhi spesifikasi Go pada perbandingan struct, di mana semua medan struct boleh dibandingkan, kod berikut gagal untuk menyusun:
type Student struct { Name string Score uint8 } func main() { alice := Student{"Alice", 98} carol := Student{"Carol", 72} if alice >= carol { // Error: "invalid operation" println("Alice >= Carol") } else { println("Alice < Carol") } }
Kunci untuk memahami kegagalan ini terletak pada membezakan antara kebolehbandingan dan kebolehaturan.
Walaupun medan struct Pelajar sememangnya setanding, pengendali >= ialah pengendali pesanan, bukan yang setanding. Perbezaan ini dinyatakan secara eksplisit dalam spesifikasi Go, di mana nilai struct ditakrifkan sebagai "sebanding jika semua medannya adalah setanding," tetapi hanya "sama jika medan bukan kosong yang sepadan adalah sama." Susunan tidak disebut dalam konteks ini.
Salah tanggapan yang membawa kepada ralat masa penyusunan ini berpunca daripada andaian bahawa kebolehbandingan membayangkan kebolehaturan. Dalam Go, ini adalah konsep yang berbeza. Walaupun struct boleh dibandingkan untuk kesamaan, ia tidak boleh dipesan secara lalai melainkan medannya menyediakan hubungan pesanan khusus.
Atas ialah kandungan terperinci Mengapa Perbandingan Struktur Gagal Berjalan Walaupun Medan Setanding?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!