Golang 1.9的主要更新

森木 · · 2751 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

因网上这个资料难查,因此转载一份,原文请点击

Go1.9的主要更新

golang每半年更新一次版本,上次最新的版本是Go1.8,而Go1.9将在今年8月释出。
Go1.9中语法的更改只有一个,那就是增加了类型别名,大部分更改是工具链,运行时,库的更改,

语法的更改

Go1.9中增加了类型别名这个语法,类型别名可以更优雅的实现当两个包之间struct的移动。类型别名的语法如下:

type T1 = T2

意思是声明一个T2类型的别名T1.

工具

并行编译

在Go1.9中并行编译啊包是默认的设置,如果需要关闭并行编译,需要设置环境变量GO19CONCURRENTCOMPILATION=0

./…可以匹配vendor了

应各位亲们的要求,之前./...不支持匹配vendor目录下的文件,现在Go1.9支持了。

性能

通常来说,很难去描述这些更改对各种场景的性能影响。大部分程序都应该运行的更快了,因为gc的提升,代码生成的更好和核心库的优化。

垃圾回收

在Go1.9之前,很多库函数都是会触发stop-the-world的,而现在只会触发并发的垃圾回收。比如:runtime.GC,debug.SetGCPerent and debug.FreeOSMemory,现在只会触发并发的垃圾回收,只会阻塞当前正在调用的goroutine,直到gc完成。
debug.SetGCPrercent函数。。。 大对象的分配性能显著的提高,当应用程序使用超大的堆(>50G),里面包含许多大对象。

runtime.ReadMemStats函数现在读取大堆的时间少于100us

核心库

并发的map

好吧,终于官方支持了,在sync包中新增了Map类型,这个Map是线程安全的map。

time包支持显示单调

Go1.9的time包支持每个Time值都是单调时间,这样能使当系统时间改变的时候,计算两个时间差也是安全的。具体看package docsdesign doc

新的位操作包

Go1.9新增了一个包,叫math/bits,提供一些位操作的优化。

参考

go1.9 release notes


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:森木

查看原文:Golang 1.9的主要更新

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

2751 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传