在 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 關注
- 128 瀏覽
添加回答
舉報
0/150
提交
取消