はじめに
最近、Go言語について勉強しておりました。
その中でGenericsなるものを触ってみて、自分なりの解釈をメモとして残します。
間違っていたりするところなどはどんどんコメントもらえると嬉しいです!!
Genericsとは?
wikipedia先生によりますと、
ジェネリックプログラミング
具体的なデータ型に直接依存しない、抽象的かつ汎用的なコード記述を可能にするコンピュータプログラミング手法である。
型が違うけど、同じような処理があってつかいまわしたい。。。
そんな時に使えたりするらしいです。。
実際に書いてみた
sample.go
package main
import (
"fmt"
)
func sampleGenerics[T comparable](x T) T {
return x
}
func main() {
var (
a int
b string
c bool
)
a = 777 //ラッキーセブン:)
b = "HelloWorld"
c = true
fmt.Printf("aの型:%T\n", sampleGenerics(a))
fmt.Printf("bの型:%T\n", sampleGenerics(b))
fmt.Printf("cの型:%T\n", sampleGenerics(c))
}
結果
$ go run sample.go
aの型:int
bの型:string
cの型:bool
上記のようになります。
ちなみに、これを型ごとに実装するとこんな感じです。
sample2.go
package main
import (
"fmt"
)
func hogehoge(x int) int {
return x
}
func piyopiyo(x string) string {
return x
}
func fugafuga(x bool) bool {
return x
}
func main() {
var (
a int
b string
c bool
)
a = 777 //ラッキーセブン:)
b = "HelloWorld"
c = true
fmt.Printf("aの型:%T\n", hogehoge(a))
fmt.Printf("bの型:%T\n", piyopiyo(b))
fmt.Printf("cの型:%T\n", fugafuga(c))
}
3つの定義が1つで済みました。
便利です!!
最後に
すごいざっくりとですが、自分なりにまとめて書いてみました。
こうやって書くと差がとても分かります。
もっと理解を深めて様々な応用方法などを別記事とかで書けたらと思います!
※書き方やご意見などありましたらどんどん書いてくださるとうれしいです!!