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
Mary-Kate Olsenasal
2024-11-28 10:58:11189semak imbas

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)
}

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!

Kenyataan:
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