PHP 편집기 Xiaoxin은 구조체의 인터페이스 유형 필드가 설정되었는지 확인하는 방법을 공유하기 위해 왔습니다. Go 언어에서는 구조체 유형이 여러 인터페이스를 구현할 수 있습니다. 인터페이스 유형 필드가 설정되어 있는지 확인하면 구조체가 특정 인터페이스를 구현하는지 쉽게 확인할 수 있습니다. 이 기술은 코드에서 개체의 유형을 정확하게 결정하고 그에 따라 처리할 수 있습니다. 다음으로 구체적인 구현 방법을 살펴보겠습니다!
필드가 인터페이스 유형에 속하는 구조 제공:
으아악그리고 이러한 인터페이스를 구현하는 구조는 다음과 같습니다.
으아악모든 필드를 명시적으로 설정하지 않고 container
인스턴스를 생성하는 코드:
리플렉션을 사용하여 명시적으로 설정되지 않은 필드를 어떻게 감지할 수 있나요?
런타임에 fieldb의 값을 확인하면 vscode는 값을 nil
로 보고합니다. 마찬가지로 c.fieldb.bar()를 호출하려고 하면 nil 포인터 역참조로 인해 패닉이 발생합니다. 하지만 리플렉션에서는 isil을 테스트할 수 없으며 iszero도 true를 반환하지 않습니다.
type a interface { foo() } type b interface { bar() } type container struct { fielda a fieldb b ... }
을 확인해야 합니다reflect.valueof(*c)
的字段,而不是 reflect.typeof(*c)
.
출력:
으아악위 내용은 구조체의 인터페이스 유형 필드가 설정되어 있는지 확인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!