AICon议程上新60%,阿里国际、360智脑、科大讯飞、蔚来汽车分享大模型探索与实践 了解详情
写点什么

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

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

关注

评论

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

数字先锋| SaaS服务“拎包入住”?央企数字化转型体验感拉满!

天翼云开发者社区

云计算 数字化转型 SaaS平台

云消息队列 ApsaraMQ 成本治理实践(文末附好礼)

阿里巴巴云原生

阿里云 云原生 ApsaraMQ

性能分析: 快速定位SQL问题

EquatorCoco

数据库 sql 性能优化

闲鱼商品详情API接口:获取与应用实战指南

Noah

疫情之后规模最大!武汉站Meetup,腾讯云与Elastic共绘ES在AI时代搜索技术新蓝图!

腾讯云大数据

ES

浅析Spring中Async注解底层异步线程池原理

得物技术

Java spring 企业号2024年6月PK榜

鸿蒙系统开发如何实现跨平台功能?

FN0

鸿蒙 跨平台 HarmonyOS 鸿蒙卡片

如何画一个系统的设计图

京东科技开发者

OceanBase 金融项目优化案例

不在线第一只蜗牛

金融 案例分享 优化 oceanbase

开源数据库生态遇新变数,天翼云TeleDB提供企业数据管理更优解!

天翼云开发者社区

数据库 云计算 存储

解决DevEco Studio中的“Cannot find module”编译错误问题

彭康佳

android 鸿蒙

妙用OSGraph:发掘GitHub知识图谱上的开源故事

TuGraphAnalytics

GitHub tugraph antv osgraph x-lab

如何在鸿蒙系统中设置Image的按压态

彭康佳

android 华为 鸿蒙

《ERC-875:开启区块链资产交易新征程》

dappweb

defi 元宇宙开发 区块链开发

大厂扎堆入驻鸿蒙,中小应用厂商怎么跟?

ToB行业头条

携手知名律所,合合信息旗下名片全能王打造数字化名片“新范式”

合合技术团队

合合信息 数字名片 名片全能王

解决TaskPool中线程管理和XML解析问题的指南

彭康佳

从打点平台谈打点治理

百度Geek说

数据质量 企业号 6 月 PK 榜 打点平台 打点治理

五连冠!天翼云稳居中国专属云服务市场榜首!

天翼云开发者社区

云计算 云服务 IDC

怎么购买GPT4o?GPT4o买不了怎么办?GPT4o订阅银行卡教程

蓉蓉

openai gpt4o

孤勇者80岁老教授40年打造国产数据库第一股,达梦开盘暴涨260%

NineData

数据库迁移 国产数据库 武汉达梦数据库 达梦上市 云数据库技术

面试官:谈谈对SpringAI的理解?

王磊

Java 面试

青椒云如何通过云桌面实现移动图形工作站

青椒云云电脑

图形工作站 移动图形工作站

移动图形工作站有哪些价格实惠的推荐?

青椒云云电脑

图形工作站 移动图形工作站

实现全国算力互联互通,我们是认真的!

天翼云开发者社区

云计算 算力

如何使用华为NEXT模拟器进行应用开发

彭康佳

android 华为 鸿蒙

又一个小伙伴在深圳上车安家~

江南一点雨

IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践

JackJiang

网络编程 即时通讯 IM

市值风云APP装机数百万,借助NineData实现数据高效流通

NineData

数据迁移 数据管理 迁移工具 NineData 市值风云

关于web自动化过程中滑块解锁问题以及页面滚动的问题的研究

测试人

软件测试 自动化测试 测试开发

生成式推荐系统与京东联盟广告-综述与应用

京东科技开发者

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