유형 변환: 문자열을 사용자 정의 유형으로
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) }
이 코드는 컴파일러 오류를 발생시킵니다.
cannot use value (type []string) as type []Card in argument to NewHand
이 오류의 원인은 관련 없는 유형 간의 우발적인 변환을 방지하기 위한 사양 설계 결정에 있습니다. 우연히 같은 구조를 공유하는 것입니다. 그러나 특정 상황에서는 이러한 슬라이스 간에 변환이 필요할 수 있습니다.
안전하지 않은 변환
동일한 기본 유형을 가진 슬라이스 간에 변환하는 것이 기술적으로 불가능하지는 않습니다. , 안전한 접근 방식에는 슬라이스 복사가 포함됩니다. 그럼에도 불구하고 안전하지 않은 패키지를 사용하여 복사하지 않고 직접 변환을 수행할 수 있습니다.
value := []string{"a", "b", "c"} // convert &value (type *[]string) to *[]Card via unsafe.Pointer, then deref cards := *(*[]Card)(unsafe.Pointer(&value)) firstHand := NewHand(cards)
주의
안전하지 않은 패키지를 사용하려면 극도의 주의가 필요합니다. 프로그램이 유형 시스템을 우회하고 임의 메모리에 액세스할 수 있도록 합니다. 변환이 중요한 경우 문자열과 카드 유형을 모두 캡슐화하는 새로운 유형을 정의하고 해당 구조 내에서 안전한 변환을 수행하는 등 다른 옵션을 고려하는 것이 좋습니다.
위 내용은 Go에서 문자열 조각을 사용자 정의 유형 조각으로 안전하게 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!