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

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

內(nèi)存布局意味著[]T不能在Go中轉(zhuǎn)換為[]接口?

內(nèi)存布局意味著[]T不能在Go中轉(zhuǎn)換為[]接口?

Go
浮云間 2021-09-21 16:19:20
所以我一直在閱讀這兩篇文章和這個答案無法將 []string 轉(zhuǎn)換為 []interface {}表示需要更改內(nèi)存布局。http://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-go說了解底層內(nèi)存使回答這個問題變得容易,并且http://research.swtch.com/interfaces,解釋了幕后發(fā)生的事情。但是對于我的生活,我想不出一個原因,就接口的實現(xiàn)而言,為什么 []T 不能轉(zhuǎn)換為 []interface。所以為什么?
查看完整描述

2 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗 獲得超11個贊

文章“ InterfaceSlice ”嘗試詳細(xì)說明:

帶類型的變量[]interface{}不是接口!它是一個元素類型恰好是 的切片interface{}。但即便如此,人們可能會說意思很清楚。

嗯,是嗎?具有類型的變量具有[]interface{}特定的內(nèi)存布局,在編譯時已知。

每個interface{}占用兩個字(一個字表示所包含內(nèi)容的類型,另一個字表示所包含的數(shù)據(jù)或指向它的指針)。因此,長度為 N 和類型的切片[]interface{}由 N*2 個字長的數(shù)據(jù)塊支持。

http://img1.sycdn.imooc.com//6149960b00016c6904870238.jpg

這與支持具有類型[]MyType和相同長度的切片的數(shù)據(jù)塊不同。它的數(shù)據(jù)塊將是N*sizeof(MyType)字長。


結(jié)果是您無法快速將 type 分配給[]MyTypetype []interface{};它們背后的數(shù)據(jù)看起來不同。


“為什么[]string不能[]interface{}在 Go 中轉(zhuǎn)換為”添加了一個很好的說明:


// imagine this is possible

var sliceOfInterface = []interface{}(sliceOfStrings)

// since it's array of interface{} now - we can do anything

// let's put integer into the first position

sliceOfInterface[0] = 1

// sliceOfStrings still points to the same array, and now "one" is replaced by 1

fmt.Println(strings.ToUpper(sliceOfStrings[0])) // BANG!


查看完整回答
反對 回復(fù) 2021-09-21
?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗 獲得超10個贊

閱讀博客文章反射定律,接口的表示部分。

接口類型的變量存儲一對:分配給變量的具體值和該值的類型描述符。更準(zhǔn)確地說,值是實現(xiàn)接口的底層具體數(shù)據(jù)項,類型描述了該項的完整類型。

所以如果你有一個值[]T(a slice of T) whereT不是一個接口,那么這種切片的元素只存儲 type 的值T,但不存儲類型信息,它屬于切片類型。

如果您有一個 type 值[]inteface{},則此類切片的元素包含這些值的具體值類型描述符。

因此 a 中的元素[]interface{}需要比 non-interface中的更多信息(更多內(nèi)存)[]T。如果這 2 個切片的占用內(nèi)存不相同,則不能只是“查看”不同(視為不同類型)。從另一個生產(chǎn)一個需要額外的工作。


查看完整回答
反對 回復(fù) 2021-09-21
  • 2 回答
  • 0 關(guān)注
  • 253 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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