Rumah > Artikel > pembangunan bahagian belakang > Mengapa Pakej `fmt` Go Mengutamakan `Ralat()` Daripada `String()` Semasa Mencetak?
Keutamaan Ralat() berbanding String()
Dalam Go, pakej fmt mengendalikan operasi pencetakan. Apabila objek mempunyai kedua-dua kaedah Ralat() dan String() dilaksanakan, kaedah Ralat() diutamakan berbanding String() untuk tujuan pencetakan.
Pengutamaan ini berpunca daripada kepentingan praktikal ralat. Ralat biasanya lebih penting untuk disampaikan daripada perwakilan rentetan umum. Oleh itu, jika objek melaksanakan antara muka ralat, kaedah Ralat()nya digunakan untuk memformat dan mencetak.
Tingkah laku ini didokumenkan dalam dokumentasi pakej untuk fmt. Petikan berikut menerangkan susunan keutamaan:
3. If an operand implements the error interface, the Error method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any). 4. If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).
Contoh
Pertimbangkan kod berikut:
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) }
Dalam contoh ini, Orang jenis melaksanakan kedua-dua kaedah String() dan Ralat(). Apabila fungsi fmt.Println() dipanggil, kaedah Ralat() digunakan dan bukannya String(), menghasilkan output berikut:
Failed Failed
Ini menunjukkan keutamaan Ralat() berbanding String( ) dalam fungsi pencetakan Go.
Atas ialah kandungan terperinci Mengapa Pakej `fmt` Go Mengutamakan `Ralat()` Daripada `String()` Semasa Mencetak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!