Go의 동적 인터페이스 구현을 위한 Reflection
Go의 Reflection은 런타임 시 코드를 검사하고 조작할 수 있는 강력한 도구입니다. 제기된 한 가지 질문은 리플렉션을 사용하여 특정 인터페이스를 구현하는 새로운 함수를 만드는 것이 가능한지 여부입니다.
문제 설명
문제는 리플렉션을 사용하는 것입니다. RPC 스타일 메서드를 정의하는 인터페이스를 구현합니다. 예를 들어 다음과 같은 인터페이스를 고려해보세요.
type MyService interface { Login(username, password string) (sessionId int, err error) HelloWorld(sessionId int) (hi string, err error) }
메서드 호출을 RPC 호출로 변환하고 입력을 마샬링하고 결과를 마샬링 해제하여 리플렉션을 사용하여 이 인터페이스를 구현하는 것이 목표입니다. 그러나 입력 매개변수 조각을 인터페이스로 얻는 것만으로는 리플렉션 기반 함수를 사용하여 인터페이스를 구현하는 값을 동적으로 생성하기에는 충분하지 않습니다.
해결책
안타깝게도 리플렉션을 통해 연결된 메서드를 사용하여 유형을 생성하고 해당 유형의 객체를 인스턴스화하는 것은 불가능합니다. 안전하지 않은 패키지는 일부 가능성을 제공할 수 있지만 힘들고 비효율적인 접근 방식입니다.
대안
반성에만 의존하는 대신 근본적인 문제에 대한 대체 솔루션을 모색해 보세요. 해결하려는 특정 문제에 대한 자세한 내용을 제공하면 커뮤니티에서 더 적합한 접근 방식을 제안하는 데 도움이 될 수 있습니다.
최근 개발
Go 버전 1.5 및 나중에 인터페이스를 동적으로 구현하는 함수를 생성하는 기능을 제공하는 Reflect.FuncOf 및 Reflect.MakeFunc를 도입했습니다. 이는 제시된 문제에 대한 실용적이고 효율적인 솔루션을 제공합니다.
위 내용은 Reflection은 RPC 스타일 메서드에 대한 Go 인터페이스를 동적으로 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!