私はGolangで(非バイナリ)ツリーを作っています。 Javaではgolangにvoid *を実装するにはどうしたらいいですか?
、私は*
class Node{
List <Object> data;
}
のようなもの
データがデータまたはCまたはC++では、子ノード
へのポインタのいずれかになります場合は、私は、ボイドを使用したいを使用したいです。
ゴランで使用するタイプ
私はGolangで(非バイナリ)ツリーを作っています。 Javaではgolangにvoid *を実装するにはどうしたらいいですか?
、私は*
class Node{
List <Object> data;
}
のようなもの
データがデータまたはCまたはC++では、子ノード
へのポインタのいずれかになります場合は、私は、ボイドを使用したいを使用したいです。
ゴランで使用するタイプ
この問題をどの言語でも解決しようとしたことはありません。これはGoで動作しますか?
go play link 編集私はあなたが実装について尋ねていない参照の重複質問を読んだ後、とにかく♥︎
package main
import (
"fmt"
)
type Node struct {
List []*Node
Data interface{}
}
func main() {
trivial := Node{}
leaf := Node{Data: 1}
tree := Node{
List: []*Node{
&leaf,
&leaf,
},
}
out(trivial)
out(leaf)
out(tree)
}
func out(x interface{}) {
fmt.Printf("%T:%+v\n", x, x)
}
// main.Node:{List:[] Data:<nil>}
// main.Node:{List:[] Data:1}
// main.Node:{List:[0xc82000e180 0xc82000e180] Data:<nil>}
Goには無効なポインタはありません。これを処理する方法は、すべてのタイプによって本質的に実装されている空のインターフェイスinterface{}
を使用することです。私はあなたがここで見つけることができるこれについてのある質問をしました。 Go equivalent of a void pointer in C
を楽しむことができるので、まあ、あまり安全でunsafe.Pointerもあります任意の型に強制される。あなたは、 'interface {}'は 'Object'に似ていますが、他のすべての型が" is "であるという単純なタイプなので、そうです。 – LinearZoetrope