Go 中確定資料結構大小的通用函數
在Go 中,缺乏類似C 的sizeof 運算子的原生函數帶來運算符了挑戰檢索任意資料結構的大小時。為了克服這個問題,利用介面和反射提供了一個解決方案。
提供的程式碼嘗試使用以下方法實現此目的:
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 }
但是,這種方法會產生錯誤的結果,因為它計算的大小Reflect.Value 結構體而不是存儲在介面T 中的物件。
解決方案在於利用Reflect.Type:
size := reflect.TypeOf(T).Size() // Corrects the size calculation
此修改使函數能夠準確地確定輸入資料結構的大小,並考慮填充。在給出的範例中,它正確地將大小報告為 40。
以上是如何取得 Go 中任意資料結構的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!