Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pakej `fmt` Go Mengutamakan `Ralat()` Daripada `String()` Semasa Mencetak?

Mengapa Pakej `fmt` Go Mengutamakan `Ralat()` Daripada `String()` Semasa Mencetak?

Barbara Streisand
Barbara Streisandasal
2024-11-24 02:33:10874semak imbas

Why Does Go's `fmt` Package Prioritize `Error()` Over `String()` When Printing?

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!

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