ホームページ >バックエンド開発 >Golang >Go インターフェイス メソッドで型パラメータを使用するにはどうすればよいですか?

Go インターフェイス メソッドで型パラメータを使用するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-29 08:43:10933ブラウズ

How Can I Use Type Parameters in Go Interface Methods?

インターフェイス メソッドでの型パラメーターの使用

Go で汎用データ構造を実装しようとしましたが、イテレータ インターフェイスの定義中にエラーが発生しました型パラメータを取るメソッドを使用します。この記事では、この問題に対処し、解決策を示します。

インターフェイス定義エラー

最初のコードでは、関数型パラメーターを取るメソッドを使用してインターフェイスが定義されており、これにより次のような問題が発生しました。エラー:「関数型には型パラメータを含めることはできません。」同様に、型パラメータをメソッドに移動すると、「メソッドには型パラメータを含めることはできません」というエラーが発生しました。

解決策: 汎用インターフェイス定義

エラーで示唆されているように, Methoden は専用の型パラメータを持つことができません。代わりに、解決策は、インターフェイス タイプ自体に type パラメータを指定することです。これにより、インターフェイス本体内のメソッドで type パラメーターを使用できるようになります。

修正されたコード:

type Iterator[T any] interface {
    ForEachRemaining(action func(T) error) error
    // other methods
}

インターフェイス タイプで type パラメーターを定義すると、それを で使用できるようになりました。期待どおりのメソッド:

type MyIterator[T any] struct {
    // implementation of the iterator
}

func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error {
    // implementation of the ForEachRemaining method using T
    return nil
}

使用例

次の例汎用イテレータ インターフェイスの使用法を示します。

package main

import (
    "fmt"
    "collection"
)

type MyIterator[T any] struct {
    // implementation of the iterator
}

func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error {
    // implementation of the ForEachRemaining method using T
    return nil
}

func main() {
    myIterator := &MyIterator[int]{}
    _ = myIterator.ForEachRemaining(func(num int) error {
        fmt.Println(num)
        return nil
    })
}

このコードは、汎用イテレータ MyIterator を定義し、それを使用して整数のスライスを反復処理し、各値を出力します。

以上がGo インターフェイス メソッドで型パラメータを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。