おふとんの中から

その辺に転がってるエンジニアの備忘録

GolangのGenericsがやっぱり便利だった話

ゆいなです。

この記事はGo Advent Calendar 2022の25日目の記事です。

UtilityFunction系がGenericsの登場によりだいぶスッキリしたことに感動したので、Genericsのおさらいも含めて書いていこうかなと思います。

GoのGenericsとは

go1.18(2022/3/18)にリリースされた機能。

Genrics自体は、引数の型の情報を引数として渡すなどを行い、あらかじめ特定のデータ型に決め打ちせずに処理内容を記述することができるものです。

まだGoのgenericsは他の言語に比べてそこまで自由度は高くないです。
そのため今回のケースは主にキャストを減らす目的で利用しています。

キャストを減らす目的の利用

これまでUtilityとして型キャスト類をすべてfunctionとして型ごとに定義して利用していました。

func GenPtrBool(b bool) *bool {
    return &b
}

func GenPtrString(s string) *string {
    return &s
}

func GenPtrInt64(i int64) *int64 {
    return &i
}

こちらを以下の書き方で1つに纏められるようになりました。

func GenPtr[T any](v T) *T {
    return &v
}

これだけでもだいぶすっきり。

配列をユニークな値にするような処理もGenericsを使うことで型ごとに定義する必要がなくなり、コード自体の見通しがよくなりますね。

1.18から使えるようになったGenericsを利用して皆様どんどんコードの見通しを良くしていきましょ。