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 中国語 Web サイトの他の関連記事を参照してください。