Rumah > pembangunan bahagian belakang > Golang > Mengapa Pakej `fmt` Go Lebih Memilih `Ralat()` Daripada `String()` Apabila Kedua-duanya Dilaksanakan?

Mengapa Pakej `fmt` Go Lebih Memilih `Ralat()` Daripada `String()` Apabila Kedua-duanya Dilaksanakan?

Mary-Kate Olsen
Lepaskan: 2024-11-28 10:58:11
asal
170 orang telah melayarinya

Why Does Go's `fmt` Package Prefer `Error()` Over `String()` When Both Are Implemented?

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

Output:

Failed Failed
Salin selepas log masuk

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!

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