0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Go言語のGenericsについて

Posted at

はじめに

最近、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つで済みました。
便利です!!

最後に

すごいざっくりとですが、自分なりにまとめて書いてみました。
こうやって書くと差がとても分かります。
もっと理解を深めて様々な応用方法などを別記事とかで書けたらと思います!

※書き方やご意見などありましたらどんどん書いてくださるとうれしいです!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?