第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

具有相同基礎類型的類型轉換結構

具有相同基礎類型的類型轉換結構

Go
Helenr 2022-08-01 09:34:46
對于基本類型,如果它們的基礎類型相同,我們可以很容易地強制轉換類型。但是,具有相同內(nèi)存布局的結構中的字段不能輕松地從一種類型轉換為另一種類型。有一個關于這個問題的建議,不幸的是它被拒絕了。經(jīng)過一個小時的谷歌搜索,沒有運氣,我來到這里尋求專家的幫助??纯聪旅娴睦樱簆ackage mainimport (    "fmt")type Int inttype A struct {    name string    age  Int}type B struct {    name string    age  int}func main() {    var a A= A{"Foo",21}    var b B= B{"Bar", 21}    fmt.Println(a,b,(A)(b))  //Error here as expected}even盡管結構 A 和 B 具有相同的底層類型,為什么我不能像底層類型一樣相互轉換。除非基礎類型不同,否則是否可以遞歸強制轉換?struct { string,int}Intint
查看完整描述

1 回答

?
蠱毒傳說

TA貢獻1895條經(jīng)驗 獲得超3個贊

你不能僅僅因為語言規(guī)范不允許這樣做就這樣做。關于結構,如果 Spec: Conversion:


在以下任何一種情況下,非常量值都可以轉換為類型:xT


...

忽略結構標記(見下文),的類型并具有相同的基礎類型。xT

如果您絕對確定結構的內(nèi)存布局是相同的,則可以使用不安全的轉換(使用包不安全),如下所示:


var a A = A{"Foo", 21}

var b B


b = *(*B)(unsafe.Pointer(&a))

fmt.Println(a, b)

這將輸出(在Go Playground上嘗試):


{Foo 21} {Foo 21}

但以此為最后的手段。使用你失去編譯時類型安全性和可移植性保證。例如,如果以后您只修改其中一個結構,則上述代碼將繼續(xù)編譯,即使它可能不再正確,編譯器將無法通知您。unsafe


查看完整回答
反對 回復 2022-08-01
  • 1 回答
  • 0 關注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號