>백엔드 개발 >Golang >Go에서 인터페이스를 구현하는 모든 구조체를 동적으로 찾을 수 있나요?

Go에서 인터페이스를 구현하는 모든 구조체를 동적으로 찾을 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-10-29 04:31:29962검색

 Can You Dynamically Find All Structs Implementing an Interface in Go?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.