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
582 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!

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