Fungsi Generik untuk Menentukan Saiz Struktur Data dalam Go
Dalam Go, kekurangan fungsi asli yang serupa dengan operator saiz C menimbulkan cabaran apabila mendapatkan semula saiz struktur data sewenang-wenangnya. Untuk mengatasinya, memanfaatkan antara muka dan refleksi menawarkan penyelesaian.
Kod yang disediakan cuba mencapai ini menggunakan:
package main import ( "fmt" "reflect" "unsafe" ) func main() { type myType struct { a int b int64 c float32 d float64 e float64 } info := myType{1, 2, 3.0, 4.0, 5.0} getSize(info) } func getSize(T interface{}) { v := reflect.ValueOf(T) const size = unsafe.Sizeof(v) fmt.Println(size) // Incorrectly produces 12 }
Walau bagaimanapun, pendekatan ini menghasilkan keputusan yang salah kerana ia mengira saiz struktur mencerminkan.Nilai dan bukannya objek yang disimpan dalam antara muka T.
Penyelesaian terletak pada penggunaan Saiz() kaedah pantulan.Jenis:
size := reflect.TypeOf(T).Size() // Corrects the size calculation
Pengubahsuaian ini membolehkan fungsi menentukan dengan tepat saiz struktur data input, mengambil kira padding. Dalam contoh yang diberikan, ia melaporkan saiznya dengan betul sebagai 40.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Saiz Sebarang Struktur Data dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!