Go에서 인터페이스의 동적 캐스팅
Go에서 개발자는 인터페이스를 동적으로 캐스팅해야 하는 경우가 종종 있습니다. 이 기사에서는 이것이 가능한지 알아보고 유형 전환 메커니즘을 사용하여 솔루션을 제공할 것입니다.
문제 설명
다음 시나리오를 고려하십시오.
var intAge = interfaceAge.(int)
이 코드는 인터페이스Age가 int 인터페이스라고 가정합니다. 그러나 실제로는 컴파일 타임에 인터페이스Age 유형을 알 수 없을 수도 있습니다. 이것은 질문을 제기합니다: 인터페이스를 유형이 지정된 변수에 동적으로 캐스팅할 수 있는 방법이 있습니까?
동적 캐스팅
불행히도 Go는 정적으로 유형이 지정된 언어입니다. 변수의 유형은 컴파일 타임에 고정됩니다. 질문에서 제안한 동적 캐스팅은 Go에서는 불가능합니다.
유형 전환
이러한 한계를 극복하기 위해 유형 전환을 사용할 수 있습니다. 유형 전환을 사용하면 런타임에 인터페이스 유형을 결정하고{} 유형별 작업을 수행할 수 있습니다.
var t interface{} t = functionOfSomeType() switch t := t.(type) { default: fmt.Printf("unexpected type %T", t) // %T prints whatever type t has case bool: fmt.Printf("boolean %t\n", t) // t has type bool case int: fmt.Printf("integer %d\n", t) // t has type int case *bool: fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool case *int: fmt.Printf("pointer to integer %d\n", *t) // t has type *int }
이 코드는 인터페이스 유형을 동적으로 결정하고{} 유형별 작업을 수행하는 방법을 보여줍니다. 유형 전환을 사용한 작업.
위 내용은 Go에서 인터페이스의 동적 캐스팅을 수행할 수 있습니까? 그렇지 않은 경우 대안은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!