Rumah > pembangunan bahagian belakang > Golang > Mengapakah `fmt.Println()` Memilih `Ralat()` Daripada `String()` untuk Jenis Tersuai?

Mengapakah `fmt.Println()` Memilih `Ralat()` Daripada `String()` untuk Jenis Tersuai?

Patricia Arquette
Lepaskan: 2024-11-27 04:20:13
asal
594 orang telah melayarinya

Why Does `fmt.Println()` Prefer `Error()` Over `String()` for Custom Types?

Mengapa Kaedah Ralat() Mengatasi Kaedah String() dalam fmt.Println()

Apabila anda melaksanakan kedua-dua String() dan Ralat () kaedah untuk jenis tersuai, anda mungkin menghadapi situasi di mana fmt.Println() mengutamakan kaedah Ralat() berbanding Kaedah String().

Ini kerana pakej fmt menggunakan hierarki apabila memilih kaedah yang hendak dipanggil untuk memformat objek. Menurut dokumentasi pakej, susunan operasi berikut digunakan:

  1. Jika objek melaksanakan antara muka Pemformat, kaedah Format()nya akan digunakan.
  2. Jika %# format v digunakan dan objek melaksanakan antara muka GoStringer, kaedah GoString()nya akan dipanggil.
  3. Jika objek melaksanakan ralat antara muka, kaedah Ralat()nya akan digunakan untuk menukar objek kepada rentetan.
  4. Jika objek melaksanakan kaedah String(), kaedah String()nya akan dipanggil.

Memandangkan antara muka ralat diberi kedudukan lebih tinggi daripada antara muka String() dalam hierarki ini, fmt.Println() akan mengutamakan kaedah Ralat() jika kedua-dua kaedah dilaksanakan untuk objek yang diberi. Ini kerana ralat biasanya memerlukan perhatian yang lebih mendesak dan harus dikomunikasikan dengan segera dengan cara yang jelas dan ringkas.

Dalam contoh yang diberikan, jenis Orang melaksanakan kedua-dua kaedah String() dan Ralat(). Walau bagaimanapun, kaedah Ralat() hanya mengembalikan rentetan "Gagal", manakala kaedah String() menyediakan penerangan yang lebih bermaklumat tentang orang itu. Apabila anda mencetak kejadian jenis Orang menggunakan fmt.Println(), anda hanya akan melihat mesej "Gagal" kerana kaedah Ralat() diutamakan berbanding kaedah String() disebabkan oleh hierarki yang disebutkan di atas.

Atas ialah kandungan terperinci Mengapakah `fmt.Println()` Memilih `Ralat()` Daripada `String()` untuk Jenis Tersuai?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan