インターフェースのゼロ値はnilです。
インタフェースがnilになる条件について説明します。
インターフェースがnilになる条件
インターフェースがnilになる条件は、インターフェースの型がnilである事です。
以下はnilになります。
package main
import (
"fmt"
)
// インターフェースの定義
type myInterface interface {
getName() string
}
func main() {
// 空インターフェース
var i interface{}
fmt.Println(i == nil) // true が表示される
// ユーザ定義型のインターフェース
var dog myInterface
fmt.Println(dog == nil) // true が表示される
}
正確にはインターフェースは、実装される型(具象型)と値で構成され、その両方がnilである場合、インターフェースはnilになるようです。
- 具象型が存在し、値がnilではないインターフェースはnilではありません。
- 具象型が存在し、値がnilのインターフェースはnilではありません。
- 具象型が存在ぜず、値がnilではないことはあり得ません。値が存在することは必ず型が定義されている状態になります。
- 具象型が存在ぜず、値がnilのインターフェースはnilになります。
インタフェースとメソット
インターフェースがnilではない場合、メソットが実行できます。
インタフェースの具象型が存在すれば、値がnilであってもメソットは実行できます。
言い換えると、メソットが実行できないインターフェースはnilになります。