ホームページ > バックエンド開発 > Golang > Goでジェネリック型のデフォルト値を返す方法は?

Goでジェネリック型のデフォルト値を返す方法は?

Linda Hamilton
リリース: 2024-12-19 02:24:09
オリジナル
965 人が閲覧しました

How to Return Default Values for Generic Types in Go?

Go でジェネリック型のデフォルト値を返す

Go では、どうすればジェネリック型 T のデフォルト値を返すことができますか?次のコードを考えてみましょう:

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

type node[T any] struct {
    data T
    next *node[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
}
ログイン後にコピー

このコードをコンパイルしようとすると、次のエラーが発生する可能性があります:

cannot use nil as T value in return statement
ログイン後にコピー

Nil を返す問題

Go ではジェネリック型に対して nil を返すことは許可されていません。これは、nil がすべての型に対して有効な値ではないためです。たとえば、T が整数の場合、nil を返しても意味がありません。同様に、nil は構造体の有効な値ではありません。

ゼロ値を返す

nil を返す代わりに、構造体に使用される型引数のゼロ値を返す必要があります。 T. ゼロ値はポインタとスライスの場合は nil、文字列の場合は空の文字列、整数と浮動小数点の場合は 0 です。

ゼロ値を返すには、T 型の変数を宣言してそれを返すことができます。

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

ゼロ値関数のテスト

これは getZero をテストする方法の例ですfunction:

package main

import "fmt"

func main() {
    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)
}
ログイン後にコピー

Output:

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

これは、getZero 関数がさまざまな型に対して期待されるゼロ値を返すことを示しています。

以上がGoでジェネリック型のデフォルト値を返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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