目的
ある型がinterfaceを実装しているかを保証したい。
環境
Go: go1.14 darwin/amd64
サンプルコード
package main
// 適当なinterfaceを定義する。
type Somether interface {
Method() bool
}
// 適当な type alias を定義する。Sometherを満足することを期待する。
type MyType string
// メソッドリストにないメソッドを定義する。つまりインターフェースを満足していない。
func (m *MyType) Method2() bool {
return true
}
// Somether型の変数を定義する。変数は利用しないので _ で無視する。
// インターフェース値の型にMyType型のポインタ、値はnilをアサインする。
var _ Somether = (*MyType)(nil)
func main() {}
// 実行結果
// cannot use (*MyType)(nil) (type *MyType) as type Somether in assignment:
// *MyType does not implement Somether (missing Method method)
標準パッケージ
標準パッケージでも一部実装されている箇所がある。以下、一例。