Go의 유형 어설션: "비인터페이스 값에서 스위치를 입력할 수 없음" 오류 해결
Go에서 유형 어설션을 사용할 때, "인터페이스가 아닌 값에서는 스위치를 입력할 수 없습니다."라는 오류가 발생할 수 있습니다. 사용자 정의 유형을 사용하는 예를 통해 이것이 의미하는 바와 해결 방법을 살펴보겠습니다.
다음 코드 조각을 고려하세요.
package main import "fmt" import "strconv" type Stringer interface { String() string } type Number struct { v int } func (number *Number) String() string { return strconv.Itoa(number.v) } func main() { n := &Number{1} switch v := n.(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
이 코드를 실행하면 "인터페이스가 아닌 값에서는 스위치를 입력할 수 없습니다." 오류가 발생합니다. 이는 비인터페이스 값에 대해 유형 어설션이 수행되고 있음을 나타냅니다. 이 경우 n은 인터페이스가 아닌 Number 구조체에 대한 포인터입니다.
해결책은 유형 어설션을 시도하기 전에 값을 인터페이스로 캐스팅하는 것입니다{}. 이는 유형 어설션이 인터페이스 값에 대해서만 수행될 수 있기 때문입니다. 수정된 코드는 다음과 같습니다.
func main() { n := &Number{1} switch v := interface{}(n).(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
이제 코드를 실행하면 "Stringer: 1"이 인쇄됩니다. n을 인터페이스{}에 캐스팅하면 유형 어설션을 위한 인터페이스 값으로 처리될 수 있기 때문입니다.
위 내용은 Go의 유형 어설션: '인터페이스가 아닌 값에서 유형 전환을 할 수 없는 이유'와 해결 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!