前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言各版本特性回顾(1.5-1.14)

Go语言各版本特性回顾(1.5-1.14)

原创
作者头像
王磊-字节跳动
修改2020-05-15 15:09:26
5.7K0
修改2020-05-15 15:09:26
举报
文章被收录于专栏:01ZOO

功能概览

备注1:有一些变化比如 runtime, 调度器,go mod 是在持续优化的,下面的列表中进行了省略 备注2:本文关注实用变化,即 以前这么用,但是现在这么用更好 的特性变化

版本

功能

备注

Go 1.5

垃圾收集器优化

Go 1.5

GOMAXPROCS=可用核心数

意味着大部分情况下无需手动设置GOMAXPROCS,旧版本 GOMAXPROCS=1

Go 1.5

内部包支持

内部引用的库放在 internal 文件夹下,外部无法引用,参考

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 支持

当你使用 type T2 T1 的时候需要考虑是不是使用 type T2 = T1 更好

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的大多数用法的性能,几乎0开销。defer已经可以用于对性能要求很高的场景了

Go 1.14

time.Timer 性能提升

针对 timer 性能问题的很多优化不再有必要了

Go 1.14

允许嵌入具有重叠方法集的接口

type ReadWriteCloser interface { io.ReadCloser;io.WriteCloser} 不会报错

Go 1.14

testing包的T、B和TB都加上了CleanUp方法

类似 defer,清理测试申请资源

Go with 1.14

  1. 大部分时候,不必关心垃圾回收的性能问题
  2. 大部分时候,不需要关心 time.Timer, defer 的性能问题
  3. 用 go mod 做包管理
  4. go build/vet/test/too trace 等工具很好用,注意跟踪他们的变化
  5. 内置的 context.Context, error 重要且实用

Go 2.0 展望

目前仍是草案阶段,三个方面

  1. Error handling: 提出了一套 check and handle 的方案,争议还是比较大 (try catch 还是 error handle 风格)
  2. Error values: 已经在 1.1x 后逐渐出现了
  3. Generics: 简单的泛型,contract,仍有争议

go 2.0 目的是解决目前 go 语言开发者中争议最大的两个问题

  1. error 处理
  2. 缺乏泛型

如何优化这两项体验的同时不引入过多复杂度是一个重要的难题(同时要兼容 go 1.x ),毕竟在我看来 go 语言最大的优势就是:“少即时多”。个人觉得:编译器实现复杂度(部分可以体现在编译速度)是考察语言复杂度的重要指标,因为:增加给编译器的复杂度,大部分也在给开发者增加复杂度。一个新语言特性,往往需要另外五个新特性来修补他带来的漏洞。希望 go 2.0 不要带来这类问题。

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能概览
  • Go with 1.14
  • Go 2.0 展望
  • 参考
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档