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中文网其他相关文章!