package main import "fmt" type Usb interface { Start() Stop() } //手机 type Phone struct { Name string } //相机 type Camera struct { Name string } //计算机 type Computer struct { } //手机实现USB接口方法 func (p Phone) Start() { fmt.Println("手机开始工作...") } func (p Phone) Stop() { fmt.Println("手机停止工作...") } func (p Phone) Call() { //该方法未定义 fmt.Println("我是手机,我要打电话...") } //相机实现USB接口方法 func (c Camera) Start() { fmt.Println("相机开始工作...") } func (c Camera) Stop() { fmt.Println("相机停止工作...") } //编写一个方法Working,接收一个USB接口类型变量 //实现了USB接口的所有方法 func (c Computer) Working(usb Usb) { //通过usb接口变量调用start和stop方法 usb.Start() //如果USB是指向Phone结构体变量,还需要调用Call方法 phone, ok := usb.(Phone) if ok { phone.Call() } usb.Stop() } func main() { var usbArr [3]Usb usbArr[0] = Phone{} usbArr[1] = Camera{} usbArr[2] = Phone{} //Phone还有一个特有的方法call(),请遍历Usb数组,如果是Phone变量, //除了调用Usb接口声明的方法外,还需要调用Phone特有方法Call(类型断言) var computer Computer for _, v := range usbArr { computer.Working(v) } }