>백엔드 개발 >Golang >Go에서 인터페이스를 구현하는 포인터의 일반 유형을 만드는 방법은 무엇입니까?

Go에서 인터페이스를 구현하는 포인터의 일반 유형을 만드는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-29 20:40:18398검색

How to Create a Generic Type for a Pointer Implementing an Interface in Go?

인터페이스를 구현하는 포인터의 일반 유형

Go에서 인터페이스로 작업할 때 포인터를 인터페이스를 구현하는 구조체입니다. 일반 함수를 정의할 때 이는 어려울 수 있습니다.

질문:

인터페이스를 구현하는 포인터에 대한 일반 유형을 어떻게 생성할 수 있나요?

답변:

옵션 1: 수정 인터페이스 정의

  1. 구현 유형이 유형 매개변수에 대한 포인터여야 함을 지정하려면 유형 매개변수로 인터페이스를 선언하세요.
type A[P any] interface {
    SomeMethod()
    *P
}
  1. 핸들러 수정 서명:
func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}

옵션 2: 인터페이스 래핑(정의 수정이 불가능한 경우)

  1. 원래 인터페이스에 포인터를 추가하고 해당 유형에 포인터를 추가합니다. 매개변수:
type MyA[P any] interface {
    A
    *P
}
  1. 래핑된 인터페이스를 허용하도록 처리기의 서명을 수정합니다.
func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}

사용법:

두 옵션 모두 A 인터페이스를 구현하는 구조체에 대한 포인터를 일반 인터페이스에 전달할 수 있습니다. 함수 핸들러. 예:

type Aimpl struct {}

func (a *Aimpl) SomeMethod() {}

func main() {
    Handler(func(a *Aimpl) { fmt.Printf("%#v\n", a) })
}

위 내용은 Go에서 인터페이스를 구현하는 포인터의 일반 유형을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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