Rumah >pembangunan bahagian belakang >Golang >Mengapakah `fmt.Println` Lebih Suka `Ralat()` Daripada `String()` dalam Go?

Mengapakah `fmt.Println` Lebih Suka `Ralat()` Daripada `String()` dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-30 04:22:11770semak imbas

Why Does `fmt.Println` Prefer `Error()` Over `String()` in Go?

Ralat() Mengatasi String() dalam fmt.Println

Dalam bahasa pengaturcaraan Go, apabila jenis melaksanakan kedua-dua String() dan Kaedah ralat(), fungsi fmt.Println memberi keutamaan kepada Ralat(). Ini bermakna jika kedua-dua kaedah dilaksanakan untuk jenis tertentu, fmt.Println akan menggunakan output yang dihasilkan oleh Error().

Untuk memahami mengapa ini berlaku, adalah penting untuk melihat dokumentasi untuk pakej fmt. Menurut dokumentasi, terdapat peraturan khusus yang mengawal cara fmt memformat pelbagai jenis data. Peraturan ini digunakan dalam susunan berikut:

  1. Jika data melaksanakan antara muka Pemformat, kaedah Pemformat digunakan untuk memformat data.
  2. Jika format %#v digunakan dan data melaksanakan antara muka GoStringer, kaedah GoStringer digunakan untuk memformat data.
  3. Jika data melaksanakan antara muka ralat, Ralat kaedah digunakan untuk memformat data.
  4. Jika data melaksanakan kaedah String(), kaedah String() digunakan untuk memformat data.

Dalam contoh yang disediakan, jenis Orang melaksanakan kedua-dua kaedah String() dan Ralat(). Walau bagaimanapun, apabila fungsi fmt.Println dipanggil untuk mencetak jenis Orang, kaedah Ralat() dipanggil dan bukannya kaedah String(). Ini kerana kaedah Ralat() diutamakan berbanding kaedah String() mengikut peraturan yang digariskan dalam dokumentasi pakej fmt.

Oleh itu, apabila sesuatu jenis melaksanakan kedua-dua kaedah String() dan Ralat(), Fungsi fmt.Println akan sentiasa menggunakan output kaedah Ralat(). Ini kerana kaedah Ralat() diberi kedudukan lebih tinggi daripada kaedah String() dalam susunan peraturan pemformatan.

Atas ialah kandungan terperinci Mengapakah `fmt.Println` Lebih Suka `Ralat()` Daripada `String()` dalam Go?. 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