备注1:有一些变化比如 runtime, 调度器,go mod 是在持续优化的,下面的列表中进行了省略 备注2:本文关注实用变化,即
以前这么用,但是现在这么用更好
的特性变化
版本 | 功能 | 备注 |
---|---|---|
Go 1.5 | 垃圾收集器优化 | |
Go 1.5 | GOMAXPROCS=可用核心数 | 意味着大部分情况下无需手动设置GOMAXPROCS,旧版本 GOMAXPROCS=1 |
Go 1.5 | 内部包支持 | 内部引用的库放在 |
Go 1.5 | go tool trace命令 | 支持细粒度的程序执行跟踪 |
Go 1.5 | go doc 命令 | 1.13 被移除,需要单独下载安装 |
Go 1.6 | 支持 HTTP/2 协议 | 只要我们使用TLS则会默认启动HTTP/2特性 |
Go 1.7 | Context 库和 vendor 支持优化 | context 成为重要的控制流、上下文传递工具 |
Go 1.8 | 垃圾回收器进一步优化 | 延迟时间全面降到毫秒级别以下 |
Go 1.9 | type alias 支持 | 当你使用 |
Go 1.9 | Test Helper函数 | 新加`(T).Helper和(B).Helper m`, 用来标记调用的函数是一个测试辅助函数 |
Go 1.10 | go build/test 增加缓存优化 | 加速构建/测试性能,当你使用 容器进行构建/测试时,如果效率较低,考虑复用缓存 |
Go 1.11 | 引入 Go modules | 从此 go mod 逐渐成为主流包管理方式 |
Go 1.12 | go vet 工具 | go tool vet不再支持 |
Go 1.13 | sync.Pool 优化 | 垃圾回收时,pool中对象不会被完全清理掉。它引入了一个cache,用于在两次GC之前清理pool中未使用的对象实例 |
Go 1.13 | defer 性能优化 | 性能提高 30% |
Go 1.13 | 新的逃逸分析(escape analysis)器 | 分析代码,何时分配到 stack 而不是heap,关于escape analysis 如何影响性能,参考一个例子 |
Go 1.13 | errors包优化 | 支持 wrapping,fmt.Errorf 增加 %w 格式符,errors 包增加三个函数(Unwrap、Is、As),很实用 |
Go 1.13 | Go modules成为默认值 | Go 1.13 后 GOPROXY 和 GOSUMDB 都会有默认值 |
Go 1.14 | defer 性能再次优化 | Go1.14提高了defer的大多数用法的性能, |
Go 1.14 | time.Timer 性能提升 | 针对 timer 性能问题的很多优化不再有必要了 |
Go 1.14 | 允许嵌入具有重叠方法集的接口 |
|
Go 1.14 | testing包的T、B和TB都加上了CleanUp方法 | 类似 defer,清理测试申请资源 |
目前仍是草案阶段,三个方面
go 2.0 目的是解决目前 go 语言开发者中争议最大的两个问题
如何优化这两项体验的同时不引入过多复杂度是一个重要的难题(同时要兼容 go 1.x ),毕竟在我看来 go 语言最大的优势就是:“少即时多”。个人觉得:编译器实现复杂度(部分可以体现在编译速度)是考察语言复杂度的重要指标,因为:增加给编译器的复杂度,大部分也在给开发者增加复杂度
。一个新语言特性,往往需要另外五个新特性来修补他带来的漏洞。希望 go 2.0 不要带来这类问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。