您的位置 首页 > 腾讯云社区

Go语言各版本特性回顾(1.5-1.14)---王磊-AI基础

功能概览

备注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大部分时候,不必关心垃圾回收的性能问题大部分时候,不需要关心 time.Timer, defer 的性能问题用 go mod 做包管理go build/vet/test/too trace 等工具很好用,注意跟踪他们的变化内置的 context.Context, error 重要且实用Go 2.0 展望

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

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

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

error 处理缺乏泛型

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

参考Go 各版本特性1.8 新特性1.9 新特性1.9 新特性Go 1.10中值得关注的几个变化Go语言回顾:从Go 1.0到Go 1.13Go 1.12 版本的新特性Go 1.13 正式发布Go 1.13 正式发布关于Go1.14,你一定想知道的性能提升与新特性Go 语言原本 ---来自腾讯云社区的---王磊-AI基础

关于作者: 瞎采新闻

这里可以显示个人介绍!这里可以显示个人介绍!

热门文章

留言与评论(共有 0 条评论)
   
验证码: