Rumah > pembangunan bahagian belakang > Golang > Mengapa `fmt.Println()` Tidak Memanggil Kaedah Stringer Saya?

Mengapa `fmt.Println()` Tidak Memanggil Kaedah Stringer Saya?

Linda Hamilton
Lepaskan: 2024-12-04 08:34:12
asal
635 orang telah melayarinya

Why Doesn't `fmt.Println()` Call My Stringer Method?

Mengapa Kaedah Antara Muka Stringer Saya Tidak Digunakan Semasa Menggunakan fmt.Println()

Anda mempunyai kaedah String() yang ditakrifkan pada * Kereta, tetapi apabila menggunakan fmt.Println(myCar), objek anda ialah nilai dan bukan penunjuk. Tingkah laku ini disebabkan oleh fmt.Println() secara tersirat menukar objek myCar kepada nilai antara muka jenis{} dan kemudian menggunakan suis jenis untuk menentukan cara mencetaknya.

Suis jenis dalam pakej fmt menyemak untuk kes jenis fmt.Stringer. Walau bagaimanapun, semakan ini gagal kerana Kereta (dan bukan *Kereta) melaksanakan kaedah String(). Memanggil String() berfungsi secara manual kerana pengkompil secara automatik menukar myCar.String() kepada (&myCar).String(), membekalkan penunjuk yang diperlukan.

Untuk menyelesaikan isu ini, anda mempunyai dua pilihan:

  • Laksanakan String() pada Kereta dan bukannya *Kereta.
  • Sentiasa hantar penunjuk ke fmt.Println():
fmt.Println(&myCar)
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa `fmt.Println()` Tidak Memanggil Kaedah Stringer Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan