go语言中支持 有像C语言中union联合体吗?怎样实现

共 7 个回复


rn2dy

I guess what you want is called "embedded struct" in Go

type Kitchen struct {
    numOfPlates int 
}

type House struct {
    Kitchen //anonymous field
    numOfRooms int 
}
# 1

gogo

type rule struct {
    itemname    string //字段名
    datatype    string // 类型
    length      int    // 长度
    tail        int    // 小数点位数
    chinesename string // 中文名字
    result interface{}
}

result 定义成空接口,就可以满足了。

# 3

dotcoo

interface{} 不是更方便吗 可以转换为你想要的任何类型 i.(int) i.(string)

var i interface{}
i = 1
fmt.Printf("%#v\n", i.(int))
i = "abc"
fmt.Printf("%#v\n", i.(string))
i = 1.11
fmt.Printf("%#v\n", i.(float64))
i = errors.New("error")
fmt.Printf("%#v\n", i.(error))
i = func(){}
fmt.Printf("%#v\n", i.(func()))
# 4

hooluupog

要c语言中那种union有什么用,我倒希望有函数式语言中那种union(代数类型),不过已经有了interface和switch type,估计可能性不大。

# 5

snake117

union是很好的东西,但是go恐怕不会去支持。

毕竟union这个东西主要还是用于不降低速度下的节约内存,为此增加的复杂度,go可不喜欢。

不过说老实话,用接口去勉强实现union的功能,那速度下将可是非常大。

go就是财大气粗,根本就不在意那么点内存的,它的程序(相同功能下)都比c/c++大好几倍的。

所以你就直接用struct好了。反正你用了union,程序体积不见得小多少。

cgo倒是可以用union,但是这个union可就在golang里不可见了。

# 6