鸭子类型 本文最后更新于:2023年12月5日 晚上 在鸭子类型中,关注点在于对象的行为(func),能作什么;而不是关注对象所属的类型(type)。 示例: 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] // MySQLDriver 实现了 Driver 的所有方法(Open),所以这里可以类型断言 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) // main.MySQLDriver drivers[name] = d // MySQLDriver 实现了 Driver 的所有方法(Open),所以这里可以赋值 } func main() { var d MySQLDriver Register("mysql", d) // MySQLDriver 实现了 Driver 的所有方法(Open),所以这里可以传参 } Golang #golang 鸭子类型 http://blog.lujinkai.cn/Golang/鸭子类型/ 作者 像方便面一样的男子 发布于 2022年1月25日 更新于 2023年12月5日 许可协议 值类型和引用类型 上一篇 如何优雅的关闭channel 下一篇