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

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

在GO中輸入接口轉(zhuǎn)換片

在GO中輸入接口轉(zhuǎn)換片

Go
冉冉說 2019-06-26 16:50:35
在GO中輸入接口轉(zhuǎn)換片我很好奇為什么Go不隱式轉(zhuǎn)換[]T到[]interface{}當(dāng)它將隱式轉(zhuǎn)換T到interface{}..關(guān)于這個轉(zhuǎn)換有什么不平凡的地方嗎?例子:func foo([]interface{}) { /* do something */ }func main() {     var a []string = []string{"hello", "world"}     foo(a)}go build抱怨不能在函數(shù)參數(shù)中使用(類型[]字符串)作為類型[]接口{}如果我想明確地做同樣的事情:b := []interface{}(a)抱怨無法將(類型[]字符串)轉(zhuǎn)換為類型[]接口{}因此,每次我需要做這個轉(zhuǎn)換(這似乎是經(jīng)常出現(xiàn)的),我一直在做這樣的事情:b = make([]interface{}, len(a), len(a))for i := range a {     b[i] = a[i]}是否有更好的方法來實現(xiàn)這個,或者標(biāo)準(zhǔn)庫函數(shù)來幫助這些轉(zhuǎn)換?每次我想要調(diào)用一個函數(shù)時,編寫4行額外的代碼,這似乎有點愚蠢,該函數(shù)可以接收例如INT或字符串的列表。
查看完整描述

3 回答

?
Qyouu

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

你錯過的是Tinterface{}它的值為T內(nèi)存中有不同的表示形式,因此不能進(jìn)行瑣碎的轉(zhuǎn)換。

類型變量T只是它在記憶中的價值。沒有關(guān)聯(lián)的類型信息(在Go中,每個變量都有一個在編譯時已知的類型,而不是在運(yùn)行時已知)。它在內(nèi)存中如下所示:

  • 價值

interface{}持有類型的變量T在內(nèi)存中表示,如下所示

  • 指向類型的指針

    T

  • 價值

回到你最初的問題:為什么Go不隱式轉(zhuǎn)換[]T[]interface{}?

轉(zhuǎn)換[]T[]interface{}將涉及創(chuàng)建一個新的interface {}值,這是一個非平凡的操作,因為內(nèi)存中的布局是完全不同的。


查看完整回答
反對 回復(fù) 2019-06-26
  • 3 回答
  • 0 關(guān)注
  • 688 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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