如何在golang中实现void *?

时间:2016-07-20 23:04:56

标签: go

我正在Golang中创建一个(非二进制)树。

在Java中,我会使用像

这样的东西
 class Node{
   List <Object> data;
 }

数据可以是指向数据的指针,也可以是子节点

在C或C ++中,我使用void *。

我应该在golang中使用什么类型

2 个答案:

答案 0 :(得分:2)

我从未试图用任何语言解决这个问题,这会在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>}

答案 1 :(得分:0)

Go中没有void指针。处理此问题的方法是使用空接口interface{},它由所有类型固有地实现。我问了一个关于这个问题的问题,你可以在这里找到; Go equivalent of a void pointer in C