Go 避免含蓄的满足感
我怎样才能避免隐式强制转换 例如:Go 避免含蓄的满足感,go,Go,我怎样才能避免隐式强制转换 例如: type runner interface { run() } type person struct { } type program struct { } func (p person) run() {} func (p program) run() {} 如果我的跑步目的只是为了个人,而不是为了一个项目? 正如您所知,person和program都实现(满足)runner接口。没有隐式转换。两个结构都满足runner,因此两个结构都可以成
type runner interface {
run()
}
type person struct {
}
type program struct {
}
func (p person) run() {}
func (p program) run() {}
如果我的跑步目的只是为了个人,而不是为了一个项目?
正如您所知,person和program都实现(满足)runner接口。没有隐式转换。两个结构都满足
runner
,因此两个结构都可以成为该接口
如果您正在执行一些有条件的操作,并且希望拆分person
和program
,则始终可以实现一个附加方法,该方法只有person
会实现,而program
不会实现。比如
类型runner接口{
isRunner()bool
运行()
}
您可能希望看到这个页面,它在底部链接到一个伟大的页面,描述什么是接口以及如何使用它们。向
运行程序添加另一个“标记”方法,例如实现运行程序()
。请参阅术语说明:Go根本不进行类型转换,无论是隐式还是其他方式。呃。。。它有点违背了point of go的接口系统,本例是一个假设,但是如果您的runner
类型类似于java的runnable接口,那么肯定会有其他方法区分这两者。一个程序必须有IO,而“运行程序”可能只是一个线程(例程),它要么不通信,要么使用通道或其他什么。一个可以帮助你区分的问题是:两种方法都没有返回值吗?例如,当运行一个程序时,它可能会在完成时返回一个状态代码。您可以为此状态代码创建自定义类型,以便不相关的“run”方法没有理由重叠。谢谢,就这样。在围棋中编码,需要一种与其他语言不同的新思维;)是的,golang中的界面肯定不同于其他一些更传统的方法。