Go 1.15新特性学习笔记

Go 1.15新特性学习笔记

2020-08-16
Go

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内容描述中可能经常用到的快速过一遍:

  1. time.Ticker增加了一个Reset方法支持改变ticker的duration。 time.Ticker是一个周期性的定时器,内置一个周期性传递时间的Channel。 使用time.NewTicker(d Duration)函数创建一个Ticker,这个Ticker内置一个通道字段,每个时间间隔会向这个通道发送当前的时间。ticker会调整时间间隔或者丢弃消息以适应反应慢的接收者。

     1func TestTickerReset(t *testing.T) {
     2    wait := make(chan struct{})
     3    ticker := time.NewTicker(time.Second * 1)
     4    go func() {
     5        defer close(wait)
     6        for i := 0; i < 5; i++ {
     7            t.Log(<-ticker.C)
     8            if i == 2 {
     9                ticker.Reset(time.Second * 2)
    10            }
    11        }
    12    }()
    13    <-wait
    14}
    
  2. time/tzdata是Go 1.15新增加的包,当系统找不到时区数据时,通过导入这个包,可以在程序中内嵌时区数据。 导入这个包会使程序大小增加大约800KB,注意time/tzdata这个包应该是在程序的main包中导入的,而不要在一个libary项目中导入和使用。 另外也可以通过编译时传递-tags timetzdata来实现同样的效果。

参考 #

© 2024 青蛙小白