Go 1.15新特性学习笔记
文章目录
【注意】最后更新于 August 16, 2020,文中内容可能已过时,请谨慎使用。
Go 1.15继1.14 6个月后发布,主要是在工具链、运行时和类库上的改进,改版本继续保持对Go 1.x版本的兼容性。
Go 1.15值得关注的变化
Go 1.15中一些值得关注的地方:
- 对Go链接器的实质性改进
- 改进了对高核心计数的小对象的分配
- X.509 CommonName弃用
- GOPROXY支持跳过返回错误的代理
- 新增了一个
time/tzdata
包 - 核心库的一些改进
从这些变化上可以看出,这个版本变化不太大,其实在工具链和运行时上也不需要过多关注,直观的体验是编译的二进制文件大小确实比1.14小了一点点。
核心库的一些改进
Go 1.15在语言方面没有什么改动,只是对核心库进行了一些改进。下面把https://golang.org/doc/go1.15#minor_library_changes内容描述中可能经常用到的快速过一遍:
-
time.Ticker增加了一个Reset方法支持改变ticker的duration。 time.Ticker是一个周期性的定时器,内置一个周期性传递时间的Channel。 使用
time.NewTicker(d Duration)
函数创建一个Ticker,这个Ticker内置一个通道字段,每个时间间隔会向这个通道发送当前的时间。ticker会调整时间间隔或者丢弃消息以适应反应慢的接收者。1 2 3 4 5 6 7 8 9 10 11 12 13 14
func TestTickerReset(t *testing.T) { wait := make(chan struct{}) ticker := time.NewTicker(time.Second * 1) go func() { defer close(wait) for i := 0; i < 5; i++ { t.Log(<-ticker.C) if i == 2 { ticker.Reset(time.Second * 2) } } }() <-wait }
-
time/tzdata
是Go 1.15新增加的包,当系统找不到时区数据时,通过导入这个包,可以在程序中内嵌时区数据。 导入这个包会使程序大小增加大约800KB,注意time/tzdata
这个包应该是在程序的main包中导入的,而不要在一个libary项目中导入和使用。 另外也可以通过编译时传递-tags timetzdata
来实现同样的效果。
参考
文章作者 青蛙小白
上次更新 2020-08-16