ゆいなです。
この記事は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を利用して皆様どんどんコードの見通しを良くしていきましょ。