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
Patricia Arquetteasal
2024-11-27 04:20:13530semak imbas

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