ホームページ > バックエンド開発 > Golang > Go でインターフェイスを実装するポインターのジェネリック型を作成する方法

Go でインターフェイスを実装するポインターのジェネリック型を作成する方法

Linda Hamilton
リリース: 2024-12-29 20:40:18
オリジナル
456 人が閲覧しました

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

インターフェイスを実装するポインターのジェネリック型

Go でインターフェイスを操作する場合、ポインターをインターフェイスに渡す必要がある場合があります。インターフェイスを実装する構造体。これは、ジェネリック関数を定義するときに難しい場合があります。

質問:

インターフェイスを実装するポインターのジェネリック型を作成するにはどうすればよいですか?

答え:

オプション 1:インターフェイス定義を変更します

  1. 型パラメーターを使用してインターフェイスを宣言し、その実装型がその型パラメーターへのポインターである必要があることを指定します。

1

2

3

4

type A[P any] interface {

    SomeMethod()

    *P

}

ログイン後にコピー
  1. ハンドラーの変更署名:

1

2

3

4

func Handler[P any, T A[P]](callback func(result T)) {

    result := new(P)

    callback(result)

}

ログイン後にコピー

オプション 2: インターフェイスをラップする (定義の変更が不可能な場合)

  1. 元のインターフェイスとその型へのポインタを追加しますパラメータ:

1

2

3

4

type MyA[P any] interface {

    A

    *P

}

ログイン後にコピー
  1. ラップされたインターフェイスを受け入れるようにハンドラーの署名を変更します:

1

2

3

4

func Handler[P any, T MyA[P]](callback func(result T)) {

    result := new(P)

    callback(result)

}

ログイン後にコピー

使用法:

どちらのオプションでも、A インターフェイスを実装する構造体へのポインタを渡すことができます。汎用関数ハンドラー。例:

1

2

3

4

5

6

7

type Aimpl struct {}

 

func (a *Aimpl) SomeMethod() {}

 

func main() {

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

}

ログイン後にコピー

以上がGo でインターフェイスを実装するポインターのジェネリック型を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート