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

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

Linda Hamilton
Linda Hamiltonasal
2024-12-04 08:34:12549semak imbas

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)

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:
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