Skip to content

Instantly share code, notes, and snippets.

@goldeneggg
Created November 27, 2014 08:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save goldeneggg/abd05091a5abfde0b572 to your computer and use it in GitHub Desktop.
Save goldeneggg/abd05091a5abfde0b572 to your computer and use it in GitHub Desktop.
package main
import "fmt"
//
// 型TがインタフェースIを実装している事を保証する実装例
//
type Nigiri interface {
Press()
}
type Maki interface {
Roll()
}
type Fish interface {
Fresh()
}
type Hikari interface {
Fish
Shine()
}
type Iwashi string
func (i Iwashi) Press() { fmt.Println(i + "の握り") }
func (i Iwashi) Fresh() { fmt.Println("新鮮") }
func (i Iwashi) Shine() { fmt.Println("ピカピカ") }
// Iwashi型がNigiri, Fish, Hikariインタフェースを実装していることを保証する
// ゼロ値による初期化を行い、インタフェース型のダミー変数へ代入を試みる
// 実装漏れがあったらエラー
var _ Nigiri = Iwashi("")
var _ Fish = Iwashi("")
var _ Hikari = Iwashi("")
//var _ Maki = Iwashi{} // Roll()を実装していないのでエラー
type Maguro struct {
Part string
}
func (m *Maguro) Press() { fmt.Println(m.Part + "の握り") }
func (m *Maguro) Roll() { fmt.Println("鉄火巻き") }
func (m *Maguro) Fresh() { fmt.Println("新鮮") }
// *Maguro型がNigiri, Maki, Fishインタフェースを実装していることを保証する
// ゼロ値(の参照)による初期化を行い、インタフェース型のダミー変数へ代入を試みる
// 実装漏れがあったらエラー
var _ Nigiri = &Maguro{}
var _ Maki = &Maguro{}
var _ Fish = &Maguro{}
//var _ Hikari = &Maguro{} // Shile()を実装していないのでエラー
func main() {
m := Maguro{"中トロ"}
m.Press()
m.Roll()
m.Fresh()
i := Iwashi("とろイワシ")
i.Press()
i.Fresh()
i.Shine()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment