Rumah > pembangunan bahagian belakang > Golang > Mengapa fmt.Println Mencetak 'ralat buruk' Daripada 5 Apabila Jenis Tersuai Melaksanakan Antara Muka Ralat Go?

Mengapa fmt.Println Mencetak 'ralat buruk' Daripada 5 Apabila Jenis Tersuai Melaksanakan Antara Muka Ralat Go?

Barbara Streisand
Lepaskan: 2024-12-22 11:37:13
asal
153 orang telah melayarinya

Why Does fmt.Println Print

Memahami Gelagat Antara Muka Go untuk Pengendalian Ralat

Dalam bahasa pengaturcaraan Go, antara muka menyediakan mekanisme yang berkuasa untuk menentukan kontrak antara jenis. Satu kontrak sedemikian ialah antara muka "Ralat", yang membenarkan jenis untuk mewakili ralat. Artikel ini meneroka senario khusus di mana mentakrifkan kaedah "Ralat" untuk jenis tersuai membawa kepada output yang tidak dijangka.

Masalahnya:

Pertimbangkan coretan kod berikut:

type T int

func (t T) Error() string {
    return "bad error"
}

func main() {
    var v interface{} = T(5)
    fmt.Println(v) //output: bad error, not 5
}
Salin selepas log masuk

Apabila anda menjalankan kod ini, output adalah "ralat buruk" dan bukannya yang dijangkakan nilai integer 5. Mengapa ini berlaku?

Jawapannya:

Tingkah laku ini boleh dijelaskan dengan memahami cara fmt.Println mengendalikan nilai. Menurut dokumentasi pakej fmt, jika operan melaksanakan antara muka "Ralat", kaedah Ralatnya digunakan untuk menukar objek kepada rentetan untuk dicetak. Memandangkan jenis T tersuai melaksanakan antara muka ini, kaedah Ralatnya mengembalikan "ralat buruk", yang dicetak bukannya nilai integer.

Resolusi:

Untuk mencetak nilai integer T, anda boleh menggunakan fungsi fmt.Printf dengan penentu format yang sesuai. Contohnya:

fmt.Printf("%d", v) //output: 5
Salin selepas log masuk

Secara bergantian, anda boleh menentukan kaedah String() tersuai untuk jenis T untuk mengawal format output apabila menggunakan fmt.Println:

type T int

func (t T) String() string {
    return strconv.Itoa(int(t))
}

func main() {
    var v interface{} = T(5)
    fmt.Println(v) //output: 5
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa fmt.Println Mencetak 'ralat buruk' Daripada 5 Apabila Jenis Tersuai Melaksanakan Antara Muka Ralat 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan