Reflection in golang
Reflection とは
プログラムの実行過程でプログラム自身の構造を読み取ったり書き換えたりする技術
いつ使うのか
Ruby,PHP,Pythonは、型を明示する必要がなく、行が実行されるまでデータの型の不整合は検知されない。一方で、Goは型を宣言しないとコンパイルさえできない言語。それゆえ、どの型のデータを扱っているか常に分かっている状態でコードを書く必要がある。しかしながら、その期待に添えない場面がある。それは、ユーザーが入力した値やファイルなどから読み込んだ値に対して動的に(自動的に)型を判断し、処理を変える必要がある時。この時、golangではreflectパッケージを使う。
reflectパッケージを使わない場合
型アサーションで任意の型interface{}に対して、switch文で型の種類に応じた処理を書くことはできるものの、全ての考えられる型に対して処理を書くのはコードが冗長になってしまう。(mapの場合、キーの型とvalueの型の両方で完全な型となるため、その場合分けを書く必要が合ったりする)
→reflectパッケージを使うとコンパイル時に型情報がわからなくとも汎用的なコードを書くことができる
下記URLは、reflectパッケージを使ってタグの値をとるサンプルコード
https://play.golang.org/p/75qMuqXRge2