嗯很好地一个例子 备忘:
package main
import(
"fmt"
)
type Usb interface{
Work()
}
type Phone struct{
Name string
}
func (this Phone) Work() {
fmt.Println("手机插入。。。开始工作")
}
func (this *Phone) CallPhone() {
fmt.Println("手机开始打电话。。。")
}
type Camera struct{
}
func (this Camera) Work() {
fmt.Println("相机开始插入usb。。。工作")
}
func (this *Camera)CameraPhoto() {
fmt.Println("照相机开始照相、、、")
}
type Computer struct{
}
func (this *Computer) Work() {
fmt.Println("电脑开始工作!")
}
func (this *Computer) Start(usb Usb) {
usb.Work()
}
func main() {
cop := &Computer{}
ph := Phone{}
ca := Camera{}
cop.Start(ph)
cop.Start(ca)
var inter Computer
usbArr := [3]Usb{ph,ca,&inter }
for _, val := range usbArr {
val.Work()
switch val.(type) {
case Phone:
temp := val.(Phone)
(&temp).CallPhone()
case Camera:
temp := val.(Camera)
temp.CameraPhoto()
default:
fmt.Println("无效数据类型")
fmt.Printf("%T\n",val)
temp := val.(*Computer)
temp.Start(val)
}
}
}