Slide 32
Slide 32 text
ジェネリックにした例
関数に渡すコールバックの戻り値の型の値がそのまま返るように出来
た
type Tx struct{ ... }
// *Tx
を引数として組み替えて、戻り値を型パラメータT
にする
func Do[T any](ctx context.Context, t *Tx, f func (ctx context.Context, tx *sql.Tx) (T, error)) (T, error) {
...
}
func main() {
ctx := context.Background()
t := Tx{ ... }
// *model.User
を戻り値の型に出来る &
型推論が効くので、型引数の指定が不要
result, err := Do(ctx, t, func (ctx context.Context, tx *sql.Tx) (*model.User, error){
...
return &model.User{ ... }, nil
})
if err != nil { ... }
fmt.Println(u.Name) //
型アサーションが不要
}