>  기사  >  백엔드 개발  >  구조체의 인터페이스 유형 필드가 설정되어 있는지 확인

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

PHPz
PHPz앞으로
2024-02-09 18:27:08658검색

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

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으로 문의하시기 바랍니다. 삭제