ジェネリック型のデフォルト値を返す 質問する

ジェネリック型のデフォルト値を返す 質問する

nilジェネリック型を返すにはどうすればよいですか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

ベストアンサー1

nil戻ることはできませんどれでも型。たとえばintが の型引数として使用されている場合、 を返しても意味がありません。も構造体の有効な値ではありません。Tnilnil

あなたができること、そして理にかなっていることは、ゼロ値に使用される型引数ですT。たとえば、ポインター、スライスの場合はゼロ値、整数および浮動小数点数の場合はnil空の文字列です。string0

ゼロ値を返すにはどうすればよいでしょうか? 型の変数を宣言してT、それを返すだけです。

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>

おすすめ記事