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 중국어 웹사이트의 기타 관련 기사를 참조하세요!