Rumah >pembangunan bahagian belakang >Golang >Mengapa fmt.Println Mencetak 'ralat buruk' Daripada 5 Apabila Integer Melaksanakan Antara Muka Ralat dalam Go?
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!