golang的interface有什么用?

我不用这个东西也能完成各种业务需求啊,要这有啥用?

阅读 5.8k
6 个回答

这不是golang的问题,这是为什么要 面向接口编程的问题
建议看看设计模式

golang的interface{}一个是可以代表设计模式中的接口,一个可以看做类似C中的void*。

强类型语言为了保持动态语言的优势添加的。类似于java中的Object,用处可大了。golang的面向对象设计就是基于interface{}的。如果你没用到,那你应该是过程式编程

大师用这个来实现类型OOP的开发. 面向接口编程.

不是说能完成各种业务,没用到的语言的特性就没用,反而该反思下,为什么自己没用到这个重要特性。
拿最简单常用的排序来说,没interface{},对于不同类型的参数你要写类似的代码n次,跟C++模板的思想类似。

需要明确interface和interface{}的区别,一个是go的语法机制用于数据抽象和解耦,一个是这个机制的具体实现。前者应该鼓励使用,而后者应该谨慎使用。
大型项目或基础项目的构建往往少不了用interface来实现数据抽象和接口。当然也要看具体需求,go不是强范式的,go/channel/interface/reflect这些特性也没有说一定用,只要你觉得代码架构能完美匹配需求就行。当然,也不是说你没用到的东西就没用,建议多看看不同类型的开源项目体会一下。
关于interface{},无论何时都应该谨慎使用,这个东西存在滥用风险,可维护性差。但本着go的实用主义哲学,如果能完美匹配需求,用用未尝不可。

推荐问题
宣传栏