GoLang 类型转换和类型断言
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")
}
}