Keutamaan Ralat() berbanding String() dalam fmt.Println
In Go, apabila mencetak objek menggunakan fmt.Println, String () kaedah biasanya digunakan untuk menukar objek kepada rentetan untuk dicetak. Walau bagaimanapun, dalam kes tertentu, kaedah Ralat() diutamakan berbanding String().
Tingkah laku ini ditakrifkan oleh pelaksanaan fmt.Println. Dokumentasi pakej menyatakan bahawa jika objek melaksanakan antara muka ralat, kaedah Ralat() akan digunakan untuk menukar objek kepada rentetan. Rentetan ini kemudiannya diformatkan seperti yang diperlukan oleh kata kerja (jika ada).
Pelaksanaan Ralat() diberi keutamaan yang lebih tinggi daripada String() kerana ralat dianggap lebih penting dalam amalan. Ini memastikan bahawa sebarang ralat dipaparkan dengan jelas, walaupun kaedah String() tersuai ditakrifkan.
Untuk menggambarkan konsep ini, pertimbangkan contoh 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, kedua-duanya Jenis orang melaksanakan kaedah String() dan Ralat(). Walau bagaimanapun, apabila objek dicetak menggunakan fmt.Println, kaedah Ralat() digunakan dan bukannya String(), menghasilkan output berikut:
Failed Failed
Ini kerana Ralat() mempunyai keutamaan yang lebih tinggi daripada String() dalam fmt.Println, memastikan bahawa sebarang ralat dipaparkan dengan jelas.
Oleh itu, apabila bekerja dengan objek yang melaksanakan kedua-dua Ralat() dan String(), adalah penting untuk mempertimbangkan output yang dikehendaki dan melaraskan pelaksanaan sewajarnya.
Atas ialah kandungan terperinci Mengapakah `fmt.Println` Mengutamakan `Ralat()` berbanding `String()` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!