> 백엔드 개발 > Golang > Go에서 인터페이스의 동적 캐스팅을 수행할 수 있습니까? 그렇지 않은 경우 대안은 무엇입니까?

Go에서 인터페이스의 동적 캐스팅을 수행할 수 있습니까? 그렇지 않은 경우 대안은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-01 16:07:17
원래의
828명이 탐색했습니다.

Can Go Perform Dynamic Casting of Interfaces, and If Not, What's the Alternative?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿