2 回答

TA貢獻1856條經驗 獲得超11個贊
Go 不能類型轉換數組。您需要手動創建目標類型的新數組,然后使用 for 循環對源數組的每個元素進行類型轉換,并將結果放入目標數組。
原因:go 不會向你隱藏內存分配,這就是為什么你需要創建新的并手動感受它的原因。

TA貢獻1887條經驗 獲得超5個贊
固定版本,在Play
正如其他人所提到的,Go 中沒有自動類型轉換。[]Cat 與 []Animal 完全不同。
您真正需要做的就是創建一個您將傳遞給該方法的類型的切片speaks
。
所以,改變:
arrayCats?:=?[]Cat{cat1,?cat2,?cat3}
到
arrayCats?:=?[]Animal{cat1,?cat2,?cat3}
它工作正常。
如果你習慣了像 Java 這樣的語言,他們會以一種非常不同的方式來處理這個問題,因為 java 將所有東西都視為一個Object
.?因此,當他們添加泛型時,這是一個簡單的編譯時技巧,其中集合實際上只是一個列表Object
,編譯器會在提取點插入一個強制轉換。
諸如此類的東西int
不是 java 中的對象,這就是為什么您不能創建 a 的原因List<int>
,因為這樣List<Object>
轉換技巧就不起作用了。因為int
不是Object
.
在 go 中,像 struct 這樣的東西沒有通用的基類型,所以沒有真正的方法來做 java 做的轉換技巧。
正如其他人所提到的,還有一些關于如何管理內存的特定功能使得自動轉換之類的東西無法以通用方式工作(即:int64 的一片與 int32 的一片不同的內存占用,因此不可轉換沒有分配)。
Go 團隊表示他們正在考慮以某種形式添加泛型,這可能會使這樣的事情更容易編寫。但這將帶來不可見的運行時或編譯時復雜性(或兩者)的成本。
今天,由于它不是自動的,您必須編寫代碼來進行轉換。這有你寫更多代碼的缺點。它的好處是系統中正在發生的事情是顯而易見的。
- 2 回答
- 0 關注
- 122 瀏覽
添加回答
舉報