首页 > 解决方案 > 避免隐含的满足

问题描述

如何避免 Go 中的隐式强制转换?

例如:

type runner interface {
    run()
}

type person struct {
}

type program struct {
}

func (p person) run()  {}
func (p program) run() {}

如果我的跑步意图只是为了人而不是程序?如您所知,人和程序都实现(满足)运行器接口。

标签: go

解决方案


没有隐式转换。两个结构都满足runner,所以两个结构都可以是那个接口。

如果您正在执行一些条件操作并且想要拆分personand program,您始终可以实现一个仅person会实现但program不会实现的附加方法。比如这个(游乐场)

type runner interface {
    isRunner() bool
    run()
}

您可能希望看到这个GoByExample页面,该页面链接到底部的一篇很棒的博客文章,描述了接口是什么以及如何使用它们。


推荐阅读