구조체의 인터페이스 유형 필드가 설정되어 있는지 확인

PHPz
풀어 주다: 2024-02-09 18:27:08
앞으로
656명이 탐색했습니다.

구조체의 인터페이스 유형 필드가 설정되어 있는지 확인

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

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!