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中的界面肯定不同于其他一些更传统的方法。