Created
November 27, 2014 08:00
-
-
Save goldeneggg/abd05091a5abfde0b572 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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