在 Go 中,由于它是静态类型语言,我们可以看到很多类型转换,例如,var x float64var y =32x=float64(32)尽管 Go 支持类型转换,但据我所知,它很少使用。有人可以解释为什么可以使用类型转换的原因和用例。以下是一个使用类型转换的示例。type Common struct { Gender int From string To string } type Foo struct { Id string Name string Extra Common } type Bar struct { Id string Name string Extra Common } foo:=Foo{ Id:"123", Name:"damitha", Extra: struct { Gender int From string To string }{Gender:1 , From:"xx", To:"yy" }, } bar:=*(*Bar)(unsafe.Pointer(&foo)) fmt.Printf("%+v\n",bar)甚至这种映射也有可能以更安全的方式实现。
2 回答

牛魔王的故事
TA贡献1830条经验 获得超3个赞
问题中的不安全恶作剧类似于类型转换。这些恶作剧是不需要的。使用转换:
bar := *(*Bar)(&foo)
或更简单地说:
bar := Bar(foo)
规范中的相关引用是:
在以下任何一种情况下,非常量值 x 都可以转换为类型 T:
...
忽略结构标签(见下文),x 的类型和 T 具有相同的基础类型。
忽略结构标签(见下文),x 的类型和 T 是未定义类型的指针类型,它们的指针基类型具有相同的底层类型。
引用中的第一点适用于Bar(foo)
因为Foo
和Bar
具有相同的基础类型。
报价中的第二点适用于转换(*Bar)(&foo)
,因为:
*Foo
并且*Bar
是指针类型*Foo
并且*Bar
不是定义的类型。基本类型
Foo
和Bar
具有相同的基础类型。
- 2 回答
- 0 关注
- 148 浏览
添加回答
举报
0/150
提交
取消