[Go言語]Genericsが導入された!!!~Go 1.18~

こんにちは。KOUKIです。

とあるWeb系企業で、Go言語エンジニアをしています。

先日、Go1.18がリリースされてGenericsが使えるようになりました。

今回は、勉強を兼ねて、Genericsを実装してみたいと思います。

Update

最初にGo言語のUpdateを行います。

私の環境では、HomeBrewでGo言語をインストールしているので、brewコマンドでUpdateをしたいと思います。

OKですね。

事前準備

下記のファイルに、コードを実装していこうと思います。

Genericsとはなんなのか

そもそもGenericsとはなんぞ?と思うかもしれません。

その疑問をコードを書きながらお答えします。

Sum関数を実装する

例えば、下記のようなコードがあるとします。

sum関数はint型の引数を二つ取り、合計した値を呼び出し元に返します。

そのため、このプログラムを実行すると以下の結果が得られます。

単純明快ですね^^

別の型を渡したい時は?

ここで一つ疑問が残ります。

もしint型以外の型を渡したい場合はどうするのか?」です。

例えば、float64の型の場合は?

当然上記のように、新しい関数を定義しますよね。

なんだか冗長な気がしません?

ここでGenericsの出番!

この問題を解決するために、Genericsを実装します。

こちら新しい書式なので、少し戸惑うかもしれません。

Tには、型を指定します。anyは新しいGo言語の型です。

これで問題ないように見えますが、以下のエラーが出ます。

anyだと型を判断できないので、+オペレーターを使った加算処理ができないようです。

対処方法は、こうします。

こんな宣言も可能になったのですね。このInterfaceをsumGenericsに指定します。

これでエラーが消えたので、プログラムを実行します。

OKですね。

このように、IntやFloatなどの型に代わりにTを宣言し、呼び出しもとで柔軟に型を選択できるようにしたものが、Genericsのようですね。

まとめ

Genericsを使うと、型違いの関数を一つにまとめることが可能です。

これは、Genericsの使用方法の一つであり、全てではないと思っています。

Go言語以外での型付け言語の経験があまりないので、有効な使い方が思い浮かばないのですが、わざわざ実装されたということはたくさんの人が要望した機能なのでしょう。

Go言語はシンプルに実装できることが特徴な言語であるので、この機能の追加により、プログラムが複雑化しないか心配ではありますね^^;

それでは、また!

Go言語まとめ

まとめ記事


コメントを残す