ホームページ > バックエンド開発 > Golang > Go でジェネリック型のデフォルト値の戻り値を処理するにはどうすればよいですか?

Go でジェネリック型のデフォルト値の戻り値を処理するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-31 18:57:22
オリジナル
533 人が閲覧しました

How Can I Handle Default Value Returns for Generic Types in Go?

Go でのジェネリック型のデフォルト値の戻り値の実装

Go では、言語に null 値がないため、空の値またはデフォルト値を返すときに問題が発生します。ジェネリック型。

Nil 戻り値の制限

検討次の汎用リスト実装:

type mylist[T any] struct {
    first *node[T]
}

type node[T any] struct {
    data T
    next *next[T]
}
ログイン後にコピー

この例では、リストから最初の要素をポップおよび取得するためのメソッドを定義します:

func (list *mylist[T]) pop() T {
    if list.first != nil {
        data := list.first.data
        list.first = list.first.next
        return data
    }
    return nil
}

func (list *mylist[T]) getfirst() T {
    if list.first != nil {
        return list.first.data
    }
    return nil
}
ログイン後にコピー

ただし、このコードをコンパイルするときは、コンパイラは、「return ステートメントでは T 値として nil を使用できません」というエラーを生成します。これは、Go がジェネリック型変数 T に暗黙的に nil を代入できないために発生します。

解決策: ゼロ値を返す

nil を返す代わりに、使用される特定の型 T のゼロ値を返すことができます。一般的なリストにあります。ゼロ値は次のとおりです。

  • ポインタの場合は Nil
  • 文字列の場合は空の文字列
  • 整数および浮動小数点数の場合は 0

これを実現するには、型 T の変数を宣言し、次の値を返します。 it:

func getZero[T any]() T {
    var result T
    return result
}
ログイン後にコピー

この関数を使用して、任意のジェネリック型のゼロ値を返すことができるようになりました。たとえば、さまざまな型に対してテストできます:

i := getZero[int]()
fmt.Printf("%T %v\n", i, i)

s := getZero[string]()
fmt.Printf("%T %q\n", s, s)

p := getZero[image.Point]()
fmt.Printf("%T %v\n", p, p)

f := getZero[*float64]()
fmt.Printf("%T %v\n", f, f)
ログイン後にコピー

出力:

int 0
string ""
image.Point (0,0)
*float64 <nil>
ログイン後にコピー

このソリューションを使用すると、Go の任意のジェネリック型に対して適切なデフォルト値または空の値を返すことができます。

以上がGo でジェネリック型のデフォルト値の戻り値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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