【发布时间】:2016-07-20 23:04:55
【问题描述】:
我正在用 Golang 制作一棵(非二叉树)树。
在 Java 中,我会使用类似的东西
class Node{
List <Object> data;
}
data 可以是指向数据的指针,也可以是指向子节点的指针
在 C 或 C++ 中,我会使用 void*。
我应该在golang中使用什么类型
【问题讨论】:
-
旁注:不要使用 void 指针 :)
标签: go
我正在用 Golang 制作一棵(非二叉树)树。
在 Java 中,我会使用类似的东西
class Node{
List <Object> data;
}
data 可以是指向数据的指针,也可以是指向子节点的指针
在 C 或 C++ 中,我会使用 void*。
我应该在golang中使用什么类型
【问题讨论】:
标签: go
我从来没有尝试用任何语言解决这个问题,这在 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 中没有 void 指针。处理这个问题的方法是使用空接口interface{},它固有地由所有类型实现。不久前我问了一个关于这个的问题,你可以在这里找到; Go equivalent of a void pointer in C
【讨论】:
interface{} 更类似于 Object,尽管它只是一种其他类型都“是”的类型。