作为一门面向对象的语言,必然少不了接口,Go的接口叫做非侵入式,虽然不存在继承的语法,但是有继承的概念。
如下,一个Connector接口,包含一个Connect()方法,一个USB接口,包含了Connector接口和一个Name()方法,然后两个类PhoneConnector和TVConnector分别实现了USB接口,一个全局Disconnect()方法,接口一个Connector参数。
package main
import (
"fmt"
)
type Connector interface {
Connect()
}
type PhoneConnector struct {
name string
}
type TVConnector struct {
name string
}
type USB interface {
Name() string
Connector
}
func (pc PhoneConnector) Connect() {
fmt.Println("Connect:", pc.name)
}
func (pc PhoneConnector) Name() string {
return pc.name
}
func (tv TVConnector) Connect() {
fmt.Println("Connect:", tv.name)
}
func (tv TVConnector) Name() string {
return tv.name
}
func Disconnect(usb Connector) {
switch v := usb.(type) {
case TVConnector:
fmt.Println("Disconnect:", v.name)
case PhoneConnector:
fmt.Println("Disconnect:", v.name)
default:
fmt.Println("Unknown device")
}
}
func main() {
pc := PhoneConnector{"PhoneConnector"}
tv := TVConnector{"TVConnector"}
pc.Connect()
tv.Connect()
Disconnect(pc)
Disconnect(tv)
}
对于以上程序,有个疑问,假如把PhoneConnector和TVConnector的两个实现函数的接收器修改为指针类型,DisConnect函数该如何写呢?试了好久无果。。。