ホームページ > バックエンド開発 > Golang > Go でデータ構造のサイズを取得するにはどうすればよいですか?

Go でデータ構造のサイズを取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-01 13:13:11
オリジナル
723 人が閲覧しました

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
}
ログイン後にコピー

を使用してこれを達成しようとします。ただし、このアプローチでは、サイズを計算するため、誤った結果が得られます。インターフェイス T に格納されているオブジェクトではなく、reflect.Value 構造体を使用します。

解決策は、 reflect.Type:

size := reflect.TypeOf(T).Size() // Corrects the size calculation
ログイン後にコピー

この変更により、関数はパディングを考慮して入力データ構造のサイズを正確に決定できるようになります。この例では、サイズが 40 として正しく報告されています。

以上がGo でデータ構造のサイズを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート