package main import "fmt" type Speaker interface{ Say(msg string) Listen(msg string) string Interrupt(msg string) } type Wanglan struct{ msg string } type Jianglou struct{ msg string } func (this *Wanglan)Say(msg string){ fmt.Println("Wanglan Say : ", msg) } func (this *Wanglan)Listen(msg string) string{ this.msg = msg return this.msg } func (this *Wanglan)Interrupt(msg string){ this.Say(msg) } func (this *Jianglou)Say(msg string){ fmt.Println("Wanglan Say : ", msg) } func (this *Jianglou)Listen(msg string)string{ this.msg = msg return this.msg } func (this *Jianglou)Interrupt(msg string){ this.Say(msg) } func main(){ var W1 *Wanglan var J1 *Jianglou var S1 Speaker S1 = W1 S1.Say("hello...") S1 = J1 S1.Say("Good Luck...") if value, OK := S1.(*Wanglan); OK{ fmt.Println("Wanglan Say : ", value) } if value, OK := S1.(*Jianglou); OK{ fmt.Println("Jianglou Say : ", value) } switch v := S1.(type){ case *Wanglan: fmt.Println("Wanglan Say : ", v) case *Jianglou: fmt.Println("Jianglou Say : ", v) default: fmt.Println("No define type") } }