亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類型轉換與類型轉換

類型轉換與類型轉換

Go
陪伴而非守候 2022-05-05 17:32:07
在 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)因為FooBar具有相同的基礎類型。

報價中的第二點適用于轉換(*Bar)(&foo),因為:

  • *Foo并且*Bar是指針類型

  • *Foo并且*Bar不是定義的類型。

  • 基本類型FooBar具有相同的基礎類型。


查看完整回答
反對 回復 2022-05-05
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

Go 既不支持類型轉換也不支持隱式類型轉換,而許多靜態支持語言(如 Java C/C++)同時支持兩者。Go 只支持類型轉換。



查看完整回答
反對 回復 2022-05-05
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號