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.

reflectパッケージ(メモ)

Last updated at Posted at 2020-12-14

Reflection in golang

Reflection とは

プログラムの実行過程でプログラム自身の構造を読み取ったり書き換えたりする技術

いつ使うのか

Ruby,PHP,Pythonは、型を明示する必要がなく、行が実行されるまでデータの型の不整合は検知されない。一方で、Goは型を宣言しないとコンパイルさえできない言語。それゆえ、どの型のデータを扱っているか常に分かっている状態でコードを書く必要がある。しかしながら、その期待に添えない場面がある。それは、ユーザーが入力した値やファイルなどから読み込んだ値に対して動的に(自動的に)型を判断し、処理を変える必要がある時。この時、golangではreflectパッケージを使う。

reflectパッケージを使わない場合

型アサーションで任意の型interface{}に対して、switch文で型の種類に応じた処理を書くことはできるものの、全ての考えられる型に対して処理を書くのはコードが冗長になってしまう。(mapの場合、キーの型とvalueの型の両方で完全な型となるため、その場合分けを書く必要が合ったりする)
→reflectパッケージを使うとコンパイル時に型情報がわからなくとも汎用的なコードを書くことができる

下記URLは、reflectパッケージを使ってタグの値をとるサンプルコード
https://play.golang.org/p/75qMuqXRge2

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?