
Go言語にはinterface型という型があるらしいんですが…どういう型なんですか?
Go言語の型のひとつである interface{}
型についてお伝えしていきます。
実は、interface型は奥が深くて一気に理解しようとすると、頭が混乱しかねません。
ですから、今回は基本中の基本に絞っていきます。
【Go言語の型】interface型とは?
interface型は、あらゆる型と互換性があります。
通常、変数を宣言する時には型もセットで宣言する必要がありますが、interface型を使用すると型にとらわれずに値を代入することができます。
ただし、通常の変数は変数の型が合っていれば足し算などの演算に使用できますが、interface型は演算には使用できません。
注意するところも合わせて、プログラムで確認していきましょう。
【Go言語の型】interface型をプログラムで確認しよう
では、interface型についてプログラムで確認していきます。
interface型を変数宣言する(varあり)
interface型は interface{}
の { } まで記述する必要があります。
// interface型を宣言
package main
import "fmt"
func main() {
// interface型はinterface{}で型指定する
var a interface{}
fmt.Println(a)
}
$ go run main.go
<nil> // <nil>が帰ってくる
interface型の初期値は nil
です。

nil
に関してはあとで説明いたしますね。
interface型の変数に値を代入する
それでは、あらゆる型と互換性があることを値を代入して確認していきます。
// interface型の変数に値を代入する
package main
import "fmt"
func main() {
var a interface{}
fmt.Println(a)
// あらゆる型を代入できることを確認する
// 整数
a = 1
fmt.Println(a)
// 小数
a = 1.23
fmt.Println(a)
// 文字列
a = "Golang"
fmt.Println(a)
// 配列
a = [3]int{1, 2, 3}
fmt.Println(a)
}
// 出力結果
$ go run main.go
<nil>
1
1.23
Golang
[1 2 3]
変数a
にいろんな型の値が代入されているのがわかります。
interface型は演算できないことを確認する
冒頭にinterface型は演算できないことをお伝えしてきました。
実際にプログラムで確認していきましょう。
// interface型は演算できないことを確認する
package main
import "fmt"
func main() {
var a2 interface{} = 1
fmt.Println(a2 + 2)
}
// 出力結果
$ go run main.go
# command-line-arguments
./main.go:34:20: invalid operation: a2 + 2 (mismatched types interface {} and int)
「無効な操作:interface型とint型は型が違います。」というエラーになります。
interface型を変数宣言する(varなし)
interface型をvarを省略して変数宣言することもできます。
// interface型を変数宣言する(varなし)
package main
import "fmt"
func main() {
b := interface{}("Golang!Go!!")
fmt.Println(b)
}
// 出力結果
$ go run main.go
Golang!Go!!
【Go言語の型】interface型の初期値nilについて
nil
は「何もない」「存在しない」という意味を持ち、他のプログラミング言語ではPythonの None
と同じです。
nil
はinterface型の初期値だけでなく、例えばstring型からint型への型変換の際に使用する関数 strconv.Atoi の戻り値でエラーがあればエラーメッセージを返しますが、エラーがなければ nil
を返します。
この nil
を利用してエラーのアリナシを判定する(エラーハンドリング)のに使用されます。

nil
はいろんな場面で出現するので覚えておきましょう。
【まとめ】Go言語の型・interface型について
今回は、Go言語の型のひとつであるinterface型の基本中の基本をお伝えしていきました。
それでは、まとめにはいります。
interface型の値を条件分岐を利用して判別して型変換するという操作もあります。
まずは基本だけは、きちんと押さえておきましょう。

何気にinterface型もGo言語の挫折ポイントのひとつですよ。
焦らずに、ゆっくりと習得していきましょう。
comment