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
が の型引数として使用されている場合、 を返しても意味がありません。も構造体の有効な値ではありません。T
nil
nil
あなたができること、そして理にかなっていることは、ゼロ値に使用される型引数ですT
。たとえば、ポインター、スライスの場合はゼロ値、整数および浮動小数点数の場合はnil
空の文字列です。string
0
ゼロ値を返すにはどうすればよいでしょうか? 型の変数を宣言して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>