Dalam Go, peta digunakan untuk menyimpan pasangan nilai kunci. Jenis nilai peta boleh terdiri daripada sebarang jenis, termasuk antara muka atau struct. Walaupun antara muka kosong dan struct kosong boleh digunakan untuk mewakili ketiadaan nilai dalam peta, terdapat beberapa perbezaan utama antara keduanya.
Penggunaan Memori
Struktur kosong mempunyai saiz tetap 0 bait, tanpa mengira seni bina. Sebaliknya, antara muka kosong mempunyai saiz 8 bait pada seni bina 32-bit dan 16 bait pada seni bina 64-bit. Ini kerana antara muka kosong menyimpan penunjuk kepada nilai sebenar, walaupun jika nilai itu adalah sifar.
Kod contoh yang disediakan dalam soalan menunjukkan perbezaan ini:
package main import ( "fmt" "unsafe" ) func main() { var s struct{} fmt.Println(unsafe.Sizeof(s)) var i interface{} fmt.Println(unsafe.Sizeof(i)) var b bool fmt.Println(unsafe.Sizeof(b)) }
Output (bait untuk seni bina 32-bit):
0 8 1
Output (bait untuk Seni bina 64-bit):
0 16 1
Seperti yang anda lihat, struct kosong mempunyai overhed memori sebanyak 0 bait, manakala antara muka kosong mempunyai overhed 8 bait (32-bit) atau 16 bait (64-bit).
Prestasi
Menggunakan struct kosong secara amnya lebih cekap daripada menggunakan antara muka kosong dari segi prestasi. Ini kerana pengkompil boleh mengoptimumkan operasi yang melibatkan struct kosong dengan lebih berkesan.
Kesimpulan
Memilih antara antara muka kosong dan struct kosong kerana jenis nilai peta bergantung mengenai keperluan khusus permohonan. Jika penggunaan memori menjadi kebimbangan, struct kosong adalah pilihan yang lebih baik. Atas sebab prestasi, struct kosong juga diutamakan. Walau bagaimanapun, jika peta bertujuan untuk digunakan dengan pelbagai jenis nilai, antara muka kosong mungkin lebih sesuai.
Atas ialah kandungan terperinci Struktur Kosong atau Antara Muka Kosong: Manakah Nilai Peta yang Lebih Baik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!