カテゴリー: BackEnd

Go 1.18のGenericsを使った地味に便利な関数を紹介

はじめに

3月15日にリリースされたGo 1.18で、ついにGenericsがサポートされました(GoのGenericsについてはこちらをご覧ください)。

そこで、今回はGenericsを利用した関数の例として、汎用的に使える地味に便利な関数を紹介します。

関数の紹介

解決したいこと

Goでコードを書いていると、地味に不便だなと感じる事があります。

例えば、

type User struct {
 name  string
 age   int
 email *string
}

名前と年齢が必須で、任意でメールアドレスを入力できるユーザ構造体があるとして、この構造体のインスタンスを生成する時に、

user := &User{
 name:  "Taro",
 age:   20,
 email: &"hoge.com",
}

このように文字列を直接ポインタとして渡すことはできないため、

email := "hoge.com"
user := &User{
 name:  "Taro",
 age:   20,
 email: &email,
}

わざわざ、変数に代入してからその変数のポインタを渡す必要があります。

関数の内容

そこで、これを解消するために作った関数がこちらです。

func ToPtr[T any](t T) *T {
 return &t
}

見て分かる通り非常にシンプルで、T型で渡された引数のポインタを返却します。

先程の例にこの関数を適用するとこのようになります。

user := &User{
 name:  "Taro",
 age:   20,
 email: ToPtr("hoge.com"),
}

このように、いちいち変数への代入をしなくて良くなるので便利です。

さいごに

Go1.18から使えるようになるGenericsを使った地味に便利な関数を紹介しました。

おすすめ書籍

Hiroki Ono

シェア
執筆者:
Hiroki Ono

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前