Go语言的特性有哪些? java

admin 6月前 84

Go语言又称Golang,是谷歌开发的具有静态强大类型、编译型、发型、垃圾回收功能的编程语言。

下面从几个方面具体介绍Go语言的特性。

语法简单

除了语法风格外,单从类型和规则来看,Go与C99、C11相似的地方很多,也是Go语言被命名为“NextC”的重要原因。

Go语言的语法处于简单复杂的两极。 c语言可以让你在脑海中想象每次你写下一行代码时,编译的情况,指令是如何执行的,内存是如何分配的等等。 c的复杂性,因为有太暧昧无限的规则,所以真的很头疼。 相比之下,Go从零开始,没有历史负担,学习了很多经验教训后,规则严格,可以从头开始规划整齐简单的世界。

Go语言的语法规则严格,没有暧昧性,也没有黑魔术的变异用法。 谁写的代码都基本一致,所以Go语言很容易掌握。 抛弃一部分“柔软”和“自由”,换成更好的维护性是值得的。

将- +、-从运算符降级为语句并保留指针,但缺省情况下阻止指针运算的好处是显而易见的。 另外,将切片和辞典作为嵌入类型,从执行时的水平进行优化也是“简单”的。

并发模型

到目前为止,并行编程已成为程序员的基本技能,在技术社区中,相关讨论的主题很多。 在这种情况下,Go语言始终是大胆的,从根本上来说,一切都是并行的,并且在Goroutine上运行,包括main.main入口函数。

Goroutine可以说是Go最显着的特征。 以类协同的方法处理同时单元,但在运行时水平上进行了更深的优化处理。 这使语法并发编程变得非常容易,无需处理回调,无需留意线程切换,只需一个关键字,简单自然。

结合channel实现CSP模型。 拆除合并单元之间的数据结合,各部门的作用,是苦于共享内存、锁粒度的开发者所期待的解放。 如果说不足,应该有更大的计划,从进程内向进程外扩展通信,实现真正意义上的分散。

存储器分配

合并一切很好,但问题也很多。 难以实现高并行存储器的分配和管理。 幸运的是,Go选择了tcmalloc。 这本来是为了同时执行而设计的高性能存储器分配组件。

存储器分配器可以说是运转时的3个组件中变化最少的部分。 删除对垃圾收集器的修改,内存分配器完全保留tcmalloc的原始体系结构。 使用cache为当前正在运行的线程提供无锁定分配,并且多个central在不同线程之间平衡内存单元的复用。 在较高级别,heap管理较大的存储器并将其分割为不同级别的多存储器块。 快速分配和二次内存平衡机制允许内存分配器成功执行高应力下的内存管理任务。

在最近的版本中,编译器优化是有效的。 将对象放置在堆栈中,以降低垃圾回收压力、降低管理成本和提高性能。 可以说,除了因性能问题偶尔被迫与对象池进行自主的内存管理以外,我们基本上没有必要参与内存管理操作。

回收垃圾

垃圾回收一直很困难。 以前Java因垃圾回收的低效率而长期受到嘲笑,但Sun继续收容许多人和技术,发展到今天。 尽管如此,在Hadoop等大规模的内存应用场景中,垃圾的回收依然很困难。

与Java相比,Go面临的困难更多。 由于存在指针,回收存储器无法收缩处理。 幸运的是,指针运算被阻止了。 否则,很难正确回收。

每次升级,垃圾收集器必须是核心组件中修改最多的部分。 从同时清洗到降低STW时间,在Go版本1.5中实现同时标记之前,导入三色标记和写入屏障等,是为了能够不影响用户逻辑地回收垃圾。 尽管做了努力,现在版本的垃圾收集算法只能说是实用的,还有实用的距离。

静态链接

Go刚发表时,静态链接被宣传为好处。 只有编译的可执行文件才能在不附加任何内容的情况下进行部署。 这似乎不错,后来风气变了。 继续了几个版本,编译器完整了动态库的buildmode功能,临时变得很尴尬。

静态编译的好处显而易见,而不是尚未完成的buildmode模式。 在运行时,将从属库直接打包到可执行文件中可以简化部署和发布,而无需预先安装运行环境或下载第三方库。 这种简单的方法对于创建系统软件非常有好处,因为库依赖关系非常麻烦。

标准程式库

功能完善、质量可靠的标准库为编程语言提供了足够的功能。 无需由第三方扩展即可完成大部分基本功能开发,大大降低了学习和使用成本。 最重要的是,标准库具有升级和修复保障,可以在运行时获得深层次的优化便利。 这不在第三方库里。

据说Go标准库不能完全垄断,但极其丰富。 其中值得称赞的是net/http,仅凭几句话就能实现高性能的web服务器,这是迄今为止宣传的亮点。 此外,基于此的优秀第三方框架将Go定位为Web/Microservice开发标准之一。

当然,优秀的第三方资源也是语言生态圈的重要组成部分。 在近年来兴起的一些语言中,Go是独特的体裁,经常出现很多优秀的作品,为学习Go提供了良好的参考。

工具链

完整的工具链对日常开发非常重要。 Go在这里做得相当不错。 您还可以使用编译、格式化、错误检查、帮助文档、下载和更新第三方软件包的工具。 那个功能不一定完备,但至少能简单地使用。

内置完整的测试框架。 其中包括设备测试、性能测试、代码复盖率、数据竞争以及用于优化的pprof。 这些是确保代码正确、稳定运行的必备工具。

此外,通过环境变量输出执行时监视信息,特别是垃圾收集和同时调度跟踪,能够改善算法,得到更好的执行期间表现。



少客联盟- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与少客联盟立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者admin少客联盟享有帖子相关版权。
3、少客联盟管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者admin少客联盟的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。
8、官方反馈邮箱:chinasuc@chinasuc.cn


上一篇:Go语言简介
下一篇:go语言的并发
Whatever is worth doing is worth doing well. juvenile hacker league
最新回复 (0)
    • 少客联盟
      2
        登录 注册 QQ登录(停用)
返回