在鸭子类型中,关注点在于对象的行为(func),能作什么;而不是关注对象所属的类型(type)。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package main
import "fmt"
var drivers = make(map[string]Driver)
type Driver interface { Open(name string) }
type DriverContext interface { OpenConnector() }
type MySQLDriver struct{}
func (d MySQLDriver) Open(name string) { driveri := drivers[name] if driverCtx, ok := driveri.(DriverContext); ok { fmt.Printf("%T\n", driverCtx) } } func (d MySQLDriver) OpenConnector() {}
func Register(name string, d Driver) { fmt.Printf("%T\n", d) drivers[name] = d } func main() { var d MySQLDriver Register("mysql", d) }
|