Go에서는 공유 동작으로 유형을 처리하기 위해 인터페이스를 사용하는 것이 일반적입니다. 그러나 유형 어설션을 사용하여 인터페이스 값의 유형을 자주 확인하는 것은 지루할 수 있습니다. 이는 질문을 제기합니다:
예를 들어 인터페이스를 사용하는 함수를 생각해 보세요.
func method(data interface{})
구체적인 유형의 필드나 메소드에 액세스하려면 일반적으로 유형을 사용합니다. 주장:
switch data.(type) { case *Struct1: a := data.(*Struct1) // ... case *Struct2: a := data.(*Struct2) // ... }
그러나 Go의 정적 유형 지정 시스템은 런타임 시 특정 유형의 변수를 생성하는 것을 방지합니다.
추상 기능:
유형 주장에 의존하는 대신 필수 항목을 정의하는 인터페이스를 만드세요. 기능. 그런 다음 구체적인 유형이 이 인터페이스를 구현하도록 합니다. 이 유형의 변수에 인터페이스 값을 할당하면 유형 어설션이 필요하지 않습니다.
반사 사용:
추상화가 불가능한 경우 반사가 가능합니다. 이름으로 공통 필드에 액세스하는 데 사용됩니다. 이 솔루션은 동적 유형 처리를 허용하지만 컴파일 시간 보장이 부족하고 성능에 영향을 미칠 수 있습니다.
위 내용은 Go에서 유형 어설션을 피할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!