QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

Go 1.1 正式发布,性能显著改善、语言细微变化

  • 2013-05-14
  • 本文字数:2206 字

    阅读完需:约 7 分钟

最近,Go 1.1 正式发布,相比 1.0,Go 1.1 包含了许多改进。最重要的改进是性能。优化的地方包括编译器、链接器、垃圾回收器、goroutine 调度、map 实现和部分标准库等等。开发者编写的代码在 Go 1.1 环境中性能会明显提高。

语言本身也有一些细微的变化,其中值得注意的两处是:

  • return 语句的变化,会使程序结构更加整洁。
  • 方法值(mehod value)的引入会便于将方法作为函数值绑定到它的接收者。

在 Go 1.1 中,并发编程更加安全,引入了 race detector 查找内存的同步错误。具体的细节可以查看手册

相关工具和标准库也得到了改进和扩展,详细内容可以查看发布说明

去年三月份,Go 1.0 正式发布,之后陆续发布了三个小版本,都是为了解决严重问题。根据兼容性指南,Go 1.1 与1.0 保持兼容,所以建议开发者都升级到最新版本。

Go 在并发编程方面的显著优势让其在短时间内引起了社区和公司的重视和实践。例如,InfoQ 之前曾经报道过 Iron.io 从 Ruby 迁移到 Go 的明显改进:

  • 服务器数量从 30 台减少到 2 台,而且第 2 台仅用于实现冗余。
  • CPU 利用率下降至 5% 以下。
  • 所用内存也下降了很多。Rails 应用在启动时需要接近 50MB 内存,而 Go 版本在启动时只需要几百 KB 内存。
  • 连锁故障成为历史。
  • 运行于成百上千台服务器上的新服务完全用 Go 编写。
  • 他们认为,Go 的使用使他们得以“构建伟大的产品,得以成长和扩展,同时还能吸引一流人才”。他们的博客中写道:“我们认为,在可预见的未来,它将继续帮助我们成长。”一般建议根据人才库的规模来选择编程语言,他们发现 Go 语言的选择帮助他们吸引了顶级人才。
  • 容易部署,因为 Go 程序会编译为一个单一静态映像。
  • Go 存在的小问题:需要学习一种新语言,库还有限。
  • 如果服务器流量很高,或者你想应对突发的增长,Go 是很好的选择。

“Go Web 编程”作者谢孟军在接受 InfoQ专访时也谈到了 Go 在 Web 编程方面的优势

Go 语言设计的时候是系统级别的语言,所以他本身就有性能上面的优势。其次 Go 在 Web 开发中内置的 net/http 包对于开发 Web 非常方便,用户可以很方便的就搭建一个 Web 应用。熟悉 PHP 的同学可能对于 nginx+fastcgi 配置都很熟悉,但是 Go 开发的应用就不需要 nginx,因为它自己就可以监控网络,解析数据包,而不依赖任何东西,你编译完之后扔到服务器起来就好了,这省去了一些部署的部分。最后就是 Go 的并发支持,大家都听说过摩尔定律,硬件只会越来越快,CPU 的核数也会越来越多,那么 Go 的这个特性就让我们这些程序员从以前的多线程处理中解放出来,让 Go 语言的 runtime 来帮我们做这个事情,那用使用 Go 来编写 Web 何乐而不为呢?

“Go 语言编程”作者 Mark Summerfield总结了 Go 语言的关键优点:

  • 像闪电一样快的编译。这使得编辑 / 编译 / 运行的周期和 Python 的编辑 / 运行周期一样快。
  • 非常高级的并发。你可以很轻松地使用 Go 语言编写并发程序,而不会有任何显式的锁。另外,goroutine 通过操作系统线程多路传输的方式,这意味着,如果你的算法最好以成千上万个并发线程来表示,那么你就可以创建那么多 goroutine——而对于线程,通常最好不要创建过多。
  • 无初始化和垃圾回收。这让我们避免了整整两类错误的发生,让编码更简单。
  • 语言本身非常小,让一般的程序员就可以掌握。当考虑模板语言的时候,C++98/03 已经不是一般程序员所能接受的, 而 C++11 更大,也更复杂。与它们相比,Go 语言:
  • 使用了新奇的方式来实现面向对象。我发现这种方法很有趣。
  • 对 Unicode 的支持。我非常喜欢 Go 语言让你可以使用原生 UTF-8 或者使用根据你想要的来使用 Unicode 字符的方式。

但是,开发社区对 Go 的看法并不总是积极的,Python 和 Go 语言的实践者 Yuval Greenfield 在“ Why I’m not leaving Python for Go ”的博文中批评了 Go 语言的错误处理机制。他首先引用了 Go 语言的设计者对错误处理机制的看法:

在 Go 语言中,错误处理非常重要。语言的设计和规范鼓励开发人员显式地检查错误(与其他语言抛出异常然后 catch 住是不同的)。这种机制某种程度上使得 Go 语言的代码冗长重复,但是幸运的是你可以利用一些技巧来把冗长的代码最小化。

Yuval 表示这点他无法忍受,每一次函数的调用都需要 if 语句来判断是否出现错误。Go 语言并没有坚持要采用这种冗长的错误机制。它也允许忽略这些函数调用错误。但是这样做很危险。理论上,我们要求开发人员决不能忽略返回的错误。而实际上,只有在一些关键性的错误上面处理才是必要的。关于 panic/recover 机制,Yuval 认为也不够出色,因为连 Go 的标准库都不怎么用这种机制:为什么索引溢出的数组要比错误格式的字符串或者失败的网络连接更需要 panic 呢?Go 语言希望能够完全避免异常,但实际上不能,总有一些异常会在某处发生,让开发人员在错误出现时感到困惑。

Mark Summerfield 认为 Go 语言的操作符重载存在问题:

IMO 这个大程序包(针对 big.Int 和 big.Rat 类型)很难使用,因为你无法对操作符重载。另外,尽管 Go 缺少泛型,但那只是针对于类库编写者的问题。由于 Go 拥有其它语言特性,所以不太需要泛型,比方说它对“<”的操作符重载对于定义自定义的数据类型就非常好。

不管怎样,虽然在最新一期的 TIOBE 编程语言排行榜前二十名的榜单中看不到 Go 语言的身影,但是 Go 语言的崛起已经势不可挡,更多的开发者准备或者已经开始实践 Go 语言编程了,在上个月刚刚结束的 QCon 北京 2013 大会上,“新锐编程语言”专题中特意包含了 Go 语言相关的演讲。

2013-05-14 09:092941
用户头像

发布了 501 篇内容, 共 264.7 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

远程控制电脑软件哪个好?

RayLink远程工具

远程控制软件 远控软件 远程桌面连接

MobPush Android SDK合规指南

MobTech袤博科技

火山引擎DataTester:抖音的设计团队是如何用A/B测试实现高效优化的?

字节跳动数据平台

大数据 AB testing实战 抖音 A/B 测试 企业号 3 月 PK 榜

数仓发展史:大数据的“底气”来自于哪?

鼎道智联

大数据 数据仓库

计算界年度大赛“先导杯”再度来袭!

科技热闻

基于ByteHouse构建实时数仓实践

字节跳动数据平台

数据库 云原生 Clickhouse 企业号 3 月 PK 榜

软件测试/测试开发丨只懂黑盒测试也能学会的代码覆盖率及精准化测试

测试人

软件测试 自动化测试 精准测试 测试开发 代码覆盖率

使用 CnosDB 与 TensorFlow 进行时间序列预测

CnosDB

tensorflow 时序数据库 时间序列预测 CnosDB

镜舟数据库与用友 YonBIP 完成兼容性认证,携手赋能企业数智化发展

镜舟科技

数据库

对话抖音电商:量级庞大、参差不齐,“数据质量治理”有妙招!

字节跳动数据平台

大数据 数据治理 电商 抖音 企业号 3 月 PK 榜

天天预约|新功能工具「美团优惠券」上线啦!

天天预约

MobPush,专业和免费的消息推送SDK

MobTech袤博科技

虚拟机专用Win10/win11系统镜像下载(m1/intel合集)

真大的脸盆

Mac win10 Mac 软件 win11 win镜像文件

Github霸榜!由阿里出品的最新java面试极速突击核心讲

Java编程日记

Java 架构 面试 java程序员 java面试

软件工程中建模的底层逻辑

阿里技术

软件工程 建模

捷讯!索信达中标光大银行“线上流量经营模型工厂”项目

索信达控股

直播|SeaTunnel 与 StarRocks 生态融合--让大数据处理回归「简单」

StarRocks

数据库 数据库·

数字孪生智慧停车场三维可视化管理云平台

2D3D前端可视化开发

智慧停车场 停车场三维可视化 数字孪生智慧停车 无人值守停车场 停车场物联网系统

百度智能云将在3月27日发布系列文心一言云服务和应用产品

百度开发者中心

#人工智能 文心一言

【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

最新Github霸榜标星96K!号称Java八股“PLUS”版,限时开源!

Java编程日记

Java 程序员 架构 Java 面试 java程序员

模块9作业

梁山伯

三大升级!百度智能云加速文心一言产业化落地

百度开发者中心

#人工智能 文心一言

对话 BitSail Contributor | 吴畅:从好奇,到深入

字节跳动数据平台

大数据 开源 开发者 数据集成 企业号 3 月 PK 榜

中国券商数字化转型趋势报告2023

易观分析

金融 券商 经济

你掌握了吗?在PCB设计中,又快又准地放置元件

华秋PCB

模块 元器件 PCB 原理图 PCB设计

云智一体,深入生命科学

百度开发者中心

云智一体 生命科学 #人工智能

《流浪地球2》里的机器人企业,如何高质量地交付产品?

万事ONES

Go 1.1正式发布,性能显著改善、语言细微变化_Google_崔康_InfoQ精选文章