我不用这个东西也能完成各种业务需求啊,要这有啥用?
强类型语言为了保持动态语言的优势添加的。类似于java中的Object
,用处可大了。golang的面向对象设计就是基于interface{}的。如果你没用到,那你应该是过程式编程
不是说能完成各种业务,没用到的语言的特性就没用,反而该反思下,为什么自己没用到这个重要特性。
拿最简单常用的排序来说,没interface{},对于不同类型的参数你要写类似的代码n次,跟C++模板的思想类似。
需要明确interface和interface{}的区别,一个是go的语法机制用于数据抽象和解耦,一个是这个机制的具体实现。前者应该鼓励使用,而后者应该谨慎使用。
大型项目或基础项目的构建往往少不了用interface来实现数据抽象和接口。当然也要看具体需求,go不是强范式的,go/channel/interface/reflect这些特性也没有说一定用,只要你觉得代码架构能完美匹配需求就行。当然,也不是说你没用到的东西就没用,建议多看看不同类型的开源项目体会一下。
关于interface{},无论何时都应该谨慎使用,这个东西存在滥用风险,可维护性差。但本着go的实用主义哲学,如果能完美匹配需求,用用未尝不可。
5 回答5.7k 阅读✓ 已解决
6 回答3.4k 阅读
2 回答3.3k 阅读✓ 已解决
1 回答5.4k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答5.1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
这不是golang的问题,这是为什么要 面向接口编程的问题
建议看看设计模式