2 回答
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
Go 不能類型轉(zhuǎn)換數(shù)組。您需要手動(dòng)創(chuàng)建目標(biāo)類型的新數(shù)組,然后使用 for 循環(huán)對(duì)源數(shù)組的每個(gè)元素進(jìn)行類型轉(zhuǎn)換,并將結(jié)果放入目標(biāo)數(shù)組。
原因:go 不會(huì)向你隱藏內(nèi)存分配,這就是為什么你需要?jiǎng)?chuàng)建新的并手動(dòng)感受它的原因。
TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
固定版本,在Play
正如其他人所提到的,Go 中沒有自動(dòng)類型轉(zhuǎn)換。[]Cat 與 []Animal 完全不同。
您真正需要做的就是創(chuàng)建一個(gè)您將傳遞給該方法的類型的切片speaks。
所以,改變:
arrayCats?:=?[]Cat{cat1,?cat2,?cat3}到
arrayCats?:=?[]Animal{cat1,?cat2,?cat3}它工作正常。
如果你習(xí)慣了像 Java 這樣的語(yǔ)言,他們會(huì)以一種非常不同的方式來(lái)處理這個(gè)問題,因?yàn)?java 將所有東西都視為一個(gè)Object.?因此,當(dāng)他們添加泛型時(shí),這是一個(gè)簡(jiǎn)單的編譯時(shí)技巧,其中集合實(shí)際上只是一個(gè)列表Object,編譯器會(huì)在提取點(diǎn)插入一個(gè)強(qiáng)制轉(zhuǎn)換。
諸如此類的東西int不是 java 中的對(duì)象,這就是為什么您不能創(chuàng)建 a 的原因List<int>,因?yàn)檫@樣List<Object>轉(zhuǎn)換技巧就不起作用了。因?yàn)?code>int不是Object.
在 go 中,像 struct 這樣的東西沒有通用的基類型,所以沒有真正的方法來(lái)做 java 做的轉(zhuǎn)換技巧。
正如其他人所提到的,還有一些關(guān)于如何管理內(nèi)存的特定功能使得自動(dòng)轉(zhuǎn)換之類的東西無(wú)法以通用方式工作(即:int64 的一片與 int32 的一片不同的內(nèi)存占用,因此不可轉(zhuǎn)換沒有分配)。
Go 團(tuán)隊(duì)表示他們正在考慮以某種形式添加泛型,這可能會(huì)使這樣的事情更容易編寫。但這將帶來(lái)不可見的運(yùn)行時(shí)或編譯時(shí)復(fù)雜性(或兩者)的成本。
今天,由于它不是自動(dòng)的,您必須編寫代碼來(lái)進(jìn)行轉(zhuǎn)換。這有你寫更多代碼的缺點(diǎn)。它的好處是系統(tǒng)中正在發(fā)生的事情是顯而易見的。
- 2 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報(bào)
