Go에서 인터페이스를 구현하는 구조체 검색
배경:
Go에서는 시나리오가 발생할 수 있습니다. 여기서는 공통 인터페이스를 구현하는 여러 구조체에 동적으로 액세스해야 합니다. 그러나 Go는 정적으로 유형이 지정된 언어이므로 특정 인터페이스 유형의 모든 구조체를 검색하는 내장 메커니즘을 제공하지 않습니다.
질문:
start() 및 stop() 메서드를 사용하여 인터페이스를 구현하는 경우 해당 인터페이스를 구현하는 모든 구조체 목록을 검색할 수 있습니까? 이 정보를 사용하면 구현된 구조체의 모든 인스턴스에서 start() 및 stop()을 동적으로 호출할 수 있습니다.
답변:
안타깝게도 아니요. 이것은 직접적으로는 불가능합니다. Go의 정적 타이핑은 사용되지 않는 유형 정의를 제거하여 애플리케이션에서 명시적으로 사용되지 않은 구조체에 액세스하기 어렵게 만듭니다.
대체 접근 방식:
구조체를 동적으로 검색하는 대신 대체 솔루션은 글로벌 지도 또는 슬라이스를 만드는 것입니다. 인터페이스를 구현하는 각 구조체는 init() 함수를 사용하여 애플리케이션을 초기화하는 동안 이 맵에 인스턴스를 추가할 수 있습니다. 이렇게 하면 다양한 구조체의 모든 인스턴스에 액세스하고 중앙에서 관리할 수 있습니다.
예:
<code class="go">var instMap = map[string]StartStopper type A struct {} func init() { instMap["A"] = new(A) }</code>
이 맵을 반복하여 동적으로 호출할 수 있습니다. 등록된 모든 인스턴스에 대한 start() 메서드.
다중 인스턴스에 대한 고려 사항:
각 유형의 인스턴스가 여러 개 존재할 수 있는 경우 인스턴스를 지도에 수동으로 추가해야 합니다. 생성될 때마다. 또한 가비지 컬렉터가 인스턴스를 무시하지 않도록 더 이상 필요하지 않은 인스턴스를 지도에서 제거해야 합니다.
위 내용은 Go에서 인터페이스를 구현하는 모든 구조체를 동적으로 찾을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!