【发布时间】:2021-02-06 15:08:24
【问题描述】:
如何避免 Go 中的隐式转换?
例如:
type runner interface {
run()
}
type person struct {
}
type program struct {
}
func (p person) run() {}
func (p program) run() {}
如果我的跑步者的意图只是为了人而不是程序? 如您所知,人和程序都实现(满足)运行器接口。
【问题讨论】:
-
向
runner添加另一个“标记”方法,例如implementsRunner()。见What is the idiomatic way in Go to create a complex hierarchy of structs? -
关于术语的说明:Go 根本不进行类型转换,无论是隐式的还是其他的。
-
Erm... 这有点违背了 go 的接口系统的意义,这个例子是一个假设,但是如果你的
runner类型类似于 java 的可运行接口,那么肯定会有其他的区分两者的方法。程序必须有 IO,而 "runner" 可能只是一个线程(例程),它要么不通信,要么使用通道或其他任何东西。 -
一个可以帮助您区分的问题:这两种方法都没有返回值真的有意义吗?例如,当运行一个程序时,它可能会在完成时返回一个状态码。您可以为此状态代码创建自定义类型,以便无关的“运行”方法没有理由重叠。
标签: go