ホームページ >バックエンド開発 >Golang >Go で Void ポインターをシミュレートしてあらゆるタイプのデータを保存するにはどうすればよいですか?

Go で Void ポインターをシミュレートしてあらゆるタイプのデータを保存するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-23 04:15:38647ブラウズ

How Can I Simulate Void Pointers in Go to Store Data of Any Type?

Go での Void ポインターの実装

Go では、void ポインターと継承が存在しないため、データ構造を作成しようとするときに問題が発生する可能性があります。あらゆる型の値を保持できます。ただし、空のインターフェイスの概念を利用する解決策があります。

interface{}

Go プログラミング言語仕様によれば、すべての型は空のインターフェイスを実装しており、これは任意の型を表すことができることを意味します。 Interface{} 型の変数または構造体フィールドを宣言すると、その場所に任意の型の値を効果的に格納できます。

この手法は、C の void ポインターと同様の機能を提供し、任意の型の値を処理できるようにします。特定の型を宣言する必要があります。たとえば、次の例を考えてみましょう。

type DataStore struct {
    Data []interface{}
}

func (ds *DataStore) Add(value interface{}) {
    ds.Data = append(ds.Data, value)
}

func main() {
    ds := &DataStore{}
    ds.Add("Hello")
    ds.Add(42)
    ds.Add(struct{ Name string }{Name: "Alice"})

    // Print the stored values
    for _, v := range ds.Data {
        fmt.Println(v)
    }
}

この例では、DataStore 構造体にインターフェース値のスライスが含まれています。{}その後、Add メソッドを使用して、さまざまな型の値をこのスライスに動的に追加できます。 main 関数は、DataStore にさまざまな型の値を保存して出力する方法を示します。

Go 1.18 以降では、any というインターフェースのエイリアスが利用可能になり、便利な短縮表現を提供します。

type DataStore struct {
    Data []any
}

以上がGo で Void ポインターをシミュレートしてあらゆるタイプのデータを保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。