Go 中的類型轉換限制
Go 強制執行嚴格的類型規則,這可以防止包含相同底層的不同類型切片之間看似明顯的轉換元素。此限制在以下程式碼中很明顯:
package main import "fmt" type Card string type Hand []Card func NewHand(cards []Card) Hand { hand := Hand(cards) return hand } func main() { value := []string{"a", "b", "c"} firstHand := NewHand(value) fmt.Println(firstHand) }
儘管[]string 和[]Card 之間很相似,但編譯器會報告錯誤:
cannot use value (type []string) as type []Card in argument to NewHand
基本原理
Go規範禁止這種轉換,以防止同時共享的不相關類型之間發生意外的類型轉換
解決方案
value := []string{"a", "b", "c"} cards := *(*[]Card)(unsafe.Pointer(&value)) firstHand := NewHand(cards)
以上是為什麼Go中不同類型的切片之間不能直接轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!