Soalan:
Walaupun mengisytiharkan contoh nil bagi struct yang memenuhi antara muka ralat , mengapa perbandingan kepada nil mengembalikan "Ralat bukan nol"?
Jawapan:
Perbandingan antara muka dalam Go mempertimbangkan kedua-dua jenis dan nilai entiti yang dibandingkan. Apabila membandingkan kejadian ralat kepada sifar, perkara berikut berlaku:
Oleh itu, walaupun kedua-dua kejadian dimulakan dengan nilai nil, jenis yang berbeza menghasilkan perbandingan yang tidak sama rata.
Untuk menangani perkara ini dan mengembalikan output "Ralat adalah sifar" yang dijangkakan, tika nil hendaklah diberikan kepada pembolehubah ralat, kerana nilai sifarnya ialah ralat(nihil). Sebagai alternatif, mengembalikan sifar dalam fungsi yang mengembalikan ralat juga akan menghasilkan hasil yang dimaksudkan.
Penerangan tentang Perbandingan Antara Muka:
Antara muka Go dilaksanakan menggunakan jenis dan a nilai. Jenis menunjukkan pelaksanaan konkrit antara muka, manakala nilai mewakili data sebenar yang disimpan. Nilai antara muka dianggap sifar hanya apabila kedua-dua jenis dan nilai tidak ditetapkan (tiada, tiada).
Apabila membandingkan dua nilai antara muka untuk kesaksamaan, kedua-dua jenis dan nilai mesti sepadan. Dalam contoh yang diberikan, tika nil bagi struct Goof mempunyai nilai nol tetapi jenis bukan nol, menjadikannya tidak sama dengan tika ralat, yang mempunyai nilai dan jenis nil.
Konsep ini melangkaui kejadian sifar. Contohnya, dua nilai integer dengan data asas yang sama (cth., 3) tetapi jenis yang berbeza (int dan Bob) akan dibandingkan sebagai tidak sama apabila disimpan dalam antara muka kerana jenisnya berbeza.
Atas ialah kandungan terperinci Mengapa Membandingkan Instance Struktur Nil dengan Nil Mengembalikan \'Ralat bukan nil\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!