C プログラミングでは、void ポインターを使用してさまざまなデータのメモリ位置にアクセスできます。種類。ただし、Go には void ポインターに直接相当するものはありません。これは、任意の型を格納する機能を必要とするデータ構造を設計するときに課題となります。
Go プログラミング言語仕様によると、すべての型Go では、空のインターフェース「interface{}」のメンバーです。このインターフェイスにはメソッドがないため、すべての型に適用できます。したがって、空のインターフェイスを使用すると、Go で void ポインターの機能を効果的に実現できます。
空のインターフェイスを使用して任意の型を保持できるデータ構造の次の例を考えてみましょう。インターフェイス:
type ArrayList struct { data []interface{} }
任意の型の値を ArrayList に追加するには:
list := ArrayList{} list.data = append(list.data, 5) list.data = append(list.data, "Hello")
To ArrayList から任意の型の値にアクセスします:
value := list.data[1] switch t := value.(type) { case int: fmt.Printf("The value is an integer: %d\n", t) case string: fmt.Printf("The value is a string: %s\n", t) case float64: fmt.Printf("The value is a float64: %f\n", t) }
Go 1.18 以降では、コードをさらに簡潔にするために、interface{} と同等の組み込みエイリアス any を使用することもできます。
type ArrayList struct { data []any }
空のインターフェース インターフェースを活用する{} (または Go の任意のインターフェース) 1.18 ) では、Go は、任意の型の値を保持および操作できるデータ構造を作成するための柔軟なメカニズムを提供します。これにより、C の void ポインターの機能が効果的にエミュレートされ、Go プログラムの柔軟性と型安全性が向上します。
以上がGo で C Void ポインターの機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。