首頁 >後端開發 >Golang >如何取得 Go 中任意資料結構的大小?

如何取得 Go 中任意資料結構的大小?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-01 13:13:11666瀏覽

How Can I Get the Size of Any Data Structure in Go?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn