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

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

Barbara Streisand
Barbara Streisandasal
2024-12-04 02:47:09492semak imbas

Why Does fmt.Println Print

Antara Muka Golang: Memahami Transformasi Integer kepada "Ralat Buruk"

Apabila bekerja dengan antara muka di Golang, adalah penting untuk memahami gelagat jenis yang melaksanakan Kaedah ralat(). Seperti yang dicontohkan dalam coretan kod yang diberikan:

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
}

Niatnya adalah untuk mentakrifkan kaedah Ralat() untuk jenis T, mengharapkan untuk mencetak nilai 5. Walau bagaimanapun, output secara mengejutkan memaparkan "ralat buruk." Untuk menjelaskan fenomena ini, kita mesti menyelidiki dokumentasi pakej fmt:

"Jika operan melaksanakan antara muka ralat, kaedah Ralat akan digunakan untuk menukar objek kepada rentetan, yang kemudiannya akan diformatkan seperti yang dikehendaki oleh kata kerja (jika ada)."

Selain itu, "Untuk setiap fungsi seperti Printf, terdapat juga fungsi Cetak yang tidak mengambil format dan bersamaan dengan menyebut %v untuk setiap operan Satu lagi varian Println memasukkan kosong antara operan dan menambahkan baris baharu."

Dalam kes ini, Println() digunakan tanpa menyatakan format, yang bersamaan dengan menggunakan %v. Memandangkan T melaksanakan antara muka ralat, kaedah Ralat() digunakan, menukar nilai kepada "ralat buruk", yang kemudiannya dicetak.

Untuk mencetak nilai integer, anda perlu menggunakan penentu format tertentu, seperti:

fmt.Printf("%d", v) // Will print the integer value

Atas ialah kandungan terperinci Mengapa fmt.Println Mencetak 'ralat buruk' Daripada 5 Apabila Integer Melaksanakan Antara Muka Ralat dalam Go?. 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