Mengapa Saya Tidak Boleh Bandingkan Go Structs dengan `>=` atau `

Mary-Kate Olsen
Lepaskan: 2024-11-09 08:36:02
asal
249 orang telah melayarinya

Why Can't I Compare Go Structs with `>=` or `=` or `" />

Go Struct Comparison: Salah Faham antara Comparable dan Ordered

In Go, struct dianggap setanding secara lalai jika semua medannya adalah setanding. Ini bermakna struct boleh ditugaskan kepada pembolehubah jenis yang sama atau dibandingkan dengan struct lain daripada jenis yang sama menggunakan operator kesamaan (== atau !=).

Walau bagaimanapun, salah tanggapan biasa timbul apabila cuba untuk gunakan operator tertib seperti >= atau <= pada struct. Walaupun struct adalah setanding, ia tidak tersusun secara semula jadi. Perbezaan ini penting untuk difahami untuk pengaturcaraan Go yang berkesan.

Dalam contoh yang diberikan:

package main

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")
  }
}
Salin selepas log masuk

Kod gagal disusun kerana >= ialah pengendali tertib. Pengkompil mengesan bahawa Pelajar tidak ditakrifkan secara eksplisit sebagai jenis tertib, yang diperlukan untuk menyokong perbandingan tersusun. Nilai struktur boleh dibandingkan untuk kesamaan menggunakan == atau !=, tetapi hubungan tertibnya (iaitu, <, >, <=, >=) tidak ditentukan.

Spesifikasi Bahasa Go menyatakan dengan jelas :

"Pengendali pesanan <, <=, >, dan >= digunakan pada operan yang tersusun. [...] Nilai struktur boleh dibandingkan jika semua medannya adalah sama jika medan bukan kosong yang sepadan adalah sama."

Oleh itu, struktur tidak tersusun secara intrinsik. pengendali seperti >= tidak disokong pada nilai struct melainkan ia diisytiharkan secara eksplisit sebagai jenis tertib. Untuk mendayakan perbandingan tersusun, jenis tersuai mesti melaksanakan isihan. Antara muka antara muka, yang memerlukan penentuan kaedah khusus untuk mengisih dan membandingkan tika jenis tersebut.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Bandingkan Go Structs dengan `>=` atau `. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan