【发布时间】:2018-08-08 13:35:13
【问题描述】:
我已经使用 C# 多年,所以我试图在 GO 中找到相似之处(我对此很陌生)。
我的目标:
我想通过Check() 之类的方法扩展接口error,这样我就可以调用error.Check(),只是因为(在我看来)可读性更好的代码。
我现在的状态:
我已经学会了如何通过使用这种语法的方法来扩展类型:
func (foo T) MyExtension() returnType {
// return something
}
我的问题:
看起来这仅适用于类型而不适用于接口。正如我目前所见,error 是一个interface,许多包都使用它来描述它们自己的错误类型的基础。我不想扩展这个错误类型(来自包),而是想扩展接口以覆盖它们。我找不到任何语法。因为我也不知道这个的技术术语(不是extension-method),所以我在谷歌搜索时有点迷失了。
那么有没有办法通过通用的方法扩展error接口呢?
【问题讨论】:
-
您不能动态地向接口添加方法。如果这是可能的,以前实现接口的类型将在运行时中断。你应该写一个函数
func Check(err error)。 -
出于好奇:
Check()方法有什么作用? -
@kostix 在第一步中,只需将
error与nil进行比较,然后退出log.fatal()。后来我会计划如何最好地处理我的情况下的错误。一开始我只是想总结所有发生的错误。 -
总结:这是一个坏主意,幸运的是它是可撤销的。
标签: go struct interface extension-methods