インターフェイスとは?
変数の値だけでなく、 変数の型情報 も同時に保持することができる言語組み込みの 特殊な構造体 のこと。
どんな時に使うの?
いろいろな型の変数を引数として受け取ることのできる汎用的な関数を書くときに使う!(使い方の一つ)
Go言語は静的型付け言語なので、変数宣言の際に変数の型を宣言しないといけない。
しかし、これでは汎用的な関数を書く際に引数に来る可能性のある型の数だけ関数を作成しなければならない。
インターフェースは任意の型の変数を格納できるので、汎用的な関数をひとつ書くだけでよくなる!
インターフェースの宣言
interface.go
var i interface{}
a := 1
i = a
fmt.Println(i) // 1
b := "str"
i = b
fmt.Println(i) //str
格納されている型を調べる
格納されている型ごとにごにょごにょしたい場合は以下のような方法で型が取得できる。
type.go
import (
"fmt"
"reflect"
)
func Type(t interface{}) {
fmt.Println(reflect.TypeOf(t))
}
func interface_test() {
var i1, i2 interface{}
i1 = 1
i2 = "str"
Type(i1) //int
Type(i2) //string
}
まとめ
今回はGo言語の特殊な構造体であるインターフェースについてまとめた。
まだ具体的にどのように使うのかイメージがついていないところがあるのでアプリの作成などを行って理解を深めていきたい。