写点什么

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:093072
用户头像

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

关注

评论

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

Rust 元宇宙 8—— 脚本

Miracle

rust 脚本 元宇宙

react源码解析6.legacy模式和concurrent模式

buchila11

React React Hooks

你有一份「写作跨年」邀请函请查收 | 28天写作计划

TGO鲲鹏会

写作 技术创作 28天写作 内容创作 热门活动

Java&Go三种HTTP客户端性能测试

FunTester

Java 性能测试 测试框架 Go 语言 FunTester

一页纸需求的应对方法 —— 五步法

CODING DevOps

业务价值 角色梳理 术语定义 主业务流程梳理 纲举目张

Python代码阅读(第66篇):两个列表的包含关系

Felix

Python Code 列表 阅读代码 Python初学者

大厂算法面试之leetcode精讲12.堆

全栈潇晨

算法 LeetCode

高维数据世界|基于高维稀疏矩阵的潜在变量模型研究

索信达控股

算法 变量模型 模型介绍 高维数据

建立合格的跨职能团队,你需要知道这些!

禅道项目管理

团队 合作共赢

【最全攻略】玩转2021LIGHT开发者云大会

恒生LIGHT云社区

技术 开发 行业 行业大会

字节跳动亿级DAU客户端发布最佳实践

字节跳动终端技术

数据产品经理实战-指标体系搭建

第519区

数据产品经理 数据产品 指标体系 指标管理

从双十一的物流大战,看全球通信网络的低延迟优化

融云 RongCloud

音视频 通信 低延迟 全球通信

社交泛娱出海新引擎,融云「六化」能力助开发者轻装上阵

融云 RongCloud

游戏出海 出海社交 出海

WICC 广州高峰对话:为开发者标注「航海地图」

融云 RongCloud

开发 游戏 社交 泛娱乐 出海

dart系列之:数学什么的就是小意思,看我dart如何玩转它

程序那些事

flutter dart 程序那些事 11月日更

混合云管理软件用哪个品牌好?咨询电话多少?

行云管家

”微博评论“的高性能高可用计算架构设计

Steven

架构实战营

react源码解析5.jsx&核心api

buchila11

React React Hooks

【IT运维小知识】虚拟化vCenter是什么意思?有啥优势?

行云管家

看完这5个核心功能,你会明白低代码平台到底能解决什么问题!

J2PaaS低代码平台

低代码 低代码开发 低代码平台

Rust 元宇宙 9 —— 库和序列化

Miracle

rust 元宇宙

Linux一学就会之Vim编辑器的使用和Xmanager工具的使用。

学神来啦

vim Linux centos 运维 ext4

行业视野 | ONES CEO 王颖奇对话极客公园张鹏

万事ONES

SaaS SaaS平台

大厂算法面试之leetcode精讲11剪枝&回溯

全栈潇晨

LeetCode 算法面试

ONES Automation 流程自动化解决方案

万事ONES

自动化 SaaS

新思科技BSIMM12报告显示开源、云、容器安全活动增长显著

InfoQ_434670063458

新思科技 软件安全 BSIMM

英特尔宋继强:秉持三个坚持,穿越技术周期,构建未来技术生态

科技新消息

手把手带你写一个 Vue3 的自定义指令

CRMEB

专家推荐五个免费的网络安全工具

喀拉峻

网络安全 安全 渗透测试 渗透

元气部落盲盒小程序开发芒趣盲盒app开发

风行无疆

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