インターフェイスを実装するポインターのジェネリック型
Go でインターフェイスを操作する場合、ポインターをインターフェイスに渡す必要がある場合があります。インターフェイスを実装する構造体。これは、ジェネリック関数を定義するときに難しい場合があります。
質問:
インターフェイスを実装するポインターのジェネリック型を作成するにはどうすればよいですか?
答え:
オプション 1:インターフェイス定義を変更します
type A[P any] interface { SomeMethod() *P }
func Handler[P any, T A[P]](callback func(result T)) { result := new(P) callback(result) }
オプション 2: インターフェイスをラップする (定義の変更が不可能な場合)
type MyA[P any] interface { A *P }
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 中国語 Web サイトの他の関連記事を参照してください。