> 백엔드 개발 > Golang > 인터페이스 구현에 대한 포인터를 허용하는 일반 Go 함수를 어떻게 만들 수 있나요?

인터페이스 구현에 대한 포인터를 허용하는 일반 Go 함수를 어떻게 만들 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-12-21 05:25:14
원래의
112명이 탐색했습니다.

How Can I Create a Generic Go Function That Accepts a Pointer to an Interface Implementation?

인터페이스 구현을 위한 일반 포인터

Go에서는 인터페이스에 대한 포인터를 허용하는 일반 함수를 정의하는 것이 어려울 수 있습니다. SomeMethod()가 있는 인터페이스 A를 생각해 보세요.

그리고 A를 구조체 포인터로 구현한다고 가정합니다.

함수를 취하는 일반 함수 핸들러를 생성하려면 A 매개변수를 사용하면 다음과 같이 정의하는 것이 바람직합니다.

그러나 다음에는 몇 가지 제약이 있습니다. 고려하세요.

모든 유형 매개변수로 시도

처음에는 포인터 구현을 허용하기 위해 유형 매개변수로 인터페이스를 정의하는 것이 가능할 것처럼 보일 수 있습니다.

그러나 다음과 같은 경우에는 실패합니다. 오류:

해결책: 유형 매개변수화된 인터페이스

이를 극복하려면 구현 유형이 포인터여야 하는 유형 매개변수를 사용하여 인터페이스를 선언할 수 있습니다. 해당 유형 매개변수에:

이 인터페이스를 사용하면 Handler 함수를 다음과 같이 사용할 수 있습니다. 수정됨:

이제 코드는 예상대로 Handler를 호출할 수 있습니다.

인터페이스 래퍼를 사용한 대안

A는 수정할 수 없습니다. 대체 접근 방식은 이를 사용자 정의로 래핑하는 것입니다. 인터페이스:

따라서 핸들러 함수를 수정합니다.

두 솔루션 모두 인터페이스 구현에 대한 포인터를 허용하는 일반 함수 생성을 허용합니다.

위 내용은 인터페이스 구현에 대한 포인터를 허용하는 일반 Go 함수를 어떻게 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿