Mengapakah `fmt.Println` Mengutamakan `Ralat()` berbanding `String()` dalam Go?

DDD
Lepaskan: 2024-11-20 20:09:16
asal
524 orang telah melayarinya

Why Does `fmt.Println` Prioritize `Error()` over `String()` in Go?

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan