Ralat() Keutamaan Berbanding String() dalam Go
Dalam Go, pakej fmt mengendalikan nilai pencetakan berdasarkan jenisnya. Apabila objek melaksanakan kedua-dua kaedah Ralat() dan String(), kaedah Ralat() diutamakan. Tingkah laku ini berpunca daripada pelaksanaan fmt, yang mengutamakan pengendalian ralat.
Menurut dokumentasi pakej fmt, jika operan melaksanakan antara muka ralat, kaedah Ralat() digunakan untuk menukar objek kepada rentetan sebelum menggunakan sebarang pemformatan. Logik ini mengatasi kaedah String(), yang dipanggil secara lalai untuk operan yang melaksanakannya.
Kod berikut menunjukkan tingkah laku ini:
package main import "fmt" type Person struct { Name string Age int } func (p *Person) String() string { return fmt.Sprintf("%v (%v years)", p.Name, p.Age) } func (p *Person) Error() string { return fmt.Sprintf("Failed") } func main() { a := &Person{"Arthur Dent", 42} z := &Person{"Zaphod Beeblebrox", 9001} fmt.Println(a, z) }
Output:
Failed Failed
Dalam contoh ini, walaupun jenis Orang melaksanakan kedua-dua String() dan Ralat(), Fungsi fmt.Println mencetak "Gagal" untuk kedua-dua orang kerana kaedah Ralat() diutamakan. Ini kerana kesilapan dianggap lebih kritikal dan memerlukan perhatian segera.
Atas ialah kandungan terperinci Mengapa Pakej `fmt` Go Lebih Memilih `Ralat()` Daripada `String()` Apabila Kedua-duanya Dilaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!