千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:南昌千锋IT培训  >  技术干货  >  Go语言interface效率低,有没有什么替代品?

Go语言interface效率低,有没有什么替代品?

来源:千锋教育
发布人:xqq
时间: 2023-10-14 02:11:12

一、Go语言interface效率低,有没有什么替代品

Go语言interface效率低,Go不是为这种程度的优化设计的,如果非要进行这么micro的优化,建议使用C++Rust等语言,或者用unsafe包。一般来讲,大家都是用空间换时间,一个结构体有多种变量类型,这样使得结构体可以表示动态类型数据。如果还需要节省空间的话,优化结构体内存布局,配合unSAFe包硬核转换应该就可以了。

如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键。在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。

Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。

没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态在语法上并非完全对等,但至少在最终实现的效果上,它有多态的影子。

虽然Go语言没有类的概念,但它支持的数据类型可以定义对应的method(s)。本质上说,所谓的method(s)其实就是函数,只不过与普通函数相比,这类函数是作用在某个数据类型上的,所以在函数签名中,会有个receiver(接收器)来表明当前定义的函数会作用在该receiver上。

Go语言支持的除Interface类型外的任何其它数据类型都可以定义其method(而并非只有struct才支持method),只不过实际项目中,method(s)多定义在struct上而已。
从这一点来看,我们可以把Go中的struct看作是不支持继承行为的轻量级的“类”。

从语法上看,Interface定义了一个或一组method(s),这些method(s)只有函数签名,没有具体的实现代码(有没有联想起C++中的虚函数?)。若某个数据类型实现了Interface中定义的那些被称为”methods”的函数,则称这些数据类型实现(implement)了interface。

延伸阅读:

二、Go Reviverevive

是一个 Go 语言的代码质量检测工具(Linter for Go),具有快速、可配置、可扩展、灵活和美观等特性,可作为 golint 的替代方案。虽然 golint 很受欢迎,但是 revive 提供了更多新功能,值得你去花时间研究,例如,它运行得更快(较高可达6x!),允许使用 TOML 文件配置 linting 规则,并提供更多规则。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

为什么采用线性探测法散列算法?

2023-10-14

为什么Redis一定要用跳表来实现有序集合?

2023-10-14

markdown用什么软件?

2023-10-14

最新文章NEW

为什么将stack译作堆栈而不是栈?

2023-10-14

什么是单支树?

2023-10-14

为什么python没有大顶堆?

2023-10-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>