go - 避免隐含的满足
问题描述
如何避免 Go 中的隐式强制转换?
例如:
type runner interface {
run()
}
type person struct {
}
type program struct {
}
func (p person) run() {}
func (p program) run() {}
如果我的跑步意图只是为了人而不是程序?如您所知,人和程序都实现(满足)运行器接口。
解决方案
没有隐式转换。两个结构都满足runner
,所以两个结构都可以是那个接口。
如果您正在执行一些条件操作并且想要拆分person
and program
,您始终可以实现一个仅person
会实现但program
不会实现的附加方法。比如这个(游乐场)
type runner interface {
isRunner() bool
run()
}
您可能希望看到这个GoByExample页面,该页面链接到底部的一篇很棒的博客文章,描述了接口是什么以及如何使用它们。