最小化Golang中的接口

时间:2015-10-20 14:49:40

标签: java go interface type-narrowing

在golang中,接口对于解耦和编写代码非常重要,因此,高级go程序可以轻松定义1000个接口。

我们如何随着时间的推移改进这些界面,以确保它们保持最小化?

  • 是否有常用的工具检查未使用的功能?

  • 是否有使用类似于java @Override的东西注释go函数的最佳实践,这可以确保声明的函数正确实现预期的契约?

通常在java语言中,很容易将代码紧密绑定到接口规范,因为高级工具允许我们查找和删除根本没有引用的函数(通常这会在任何常见的情况下自动突出显示) IDE)。

2 个答案:

答案 0 :(得分:0)

  

是否有常用的检查未使用功能的工具?

排序,但很难确定导出的接口。 oracle可用于查找对类型或方法的引用,但前提是您拥有在gopath中引用可用的所有代码。

  

你能确保一个类型实现合同吗?

如果您尝试将类型用作接口,则编译器会抱怨它没有所有方法。我通常通过导出接口而不是实现来做这个,并创建一个构造函数:

type MyInterface interface{
    Foo()
}
type impl struct{}
func (i *impl) Foo(){}
func NewImpl() MyInterface{
    return &impl{}
}

如果impl没有实现所有必需的函数,则无法编译。

在go中,不需要声明您实现了接口。这允许您实现一个接口,甚至不需要引用它定义的包。这几乎完全与#34;紧密绑定到接口规范"相反,但它确实允许一些有趣的使用模式。 / p>

答案 1 :(得分:0)

你所要求的并不是Go的一部分。没有注释函数满足接口的最佳实践。我个人会说,唯一明确的最佳做法是记录您的类型实现的接口,以便人们可以知道。如果你想显式地(在编译时)测试一个类型是否实现了一个接口你可以使用赋值来完成,请在这里查看我的答案; How to check if an object has a particular method?

如果您只想查看代码库的清单以进行一些清理,我建议您为所有类型使用该分配方法,以生成有关它们未实现的编译时错误,扩展在声明之前直到它编译。在这样做时,您应该意识到可能实现的内容与实际内容之间的差异。

Go还缺少IDE选项。因此,一些友好的功能,如"找到所有参考"不在那里。您可以使用文本搜索技巧来解决此问题,例如搜索func TheName仅获取声明,.TheName(获取所有调用。如果你继续使用这个工具,我相信你会很快习惯它。