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会调整时间间隔或者丢弃消息以适应反应慢的接收者。

     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
    }
    
  2. time/tzdata是Go 1.15新增加的包,当系统找不到时区数据时,通过导入这个包,可以在程序中内嵌时区数据。 导入这个包会使程序大小增加大约800KB,注意time/tzdata这个包应该是在程序的main包中导入的,而不要在一个libary项目中导入和使用。 另外也可以通过编译时传递-tags timetzdata来实现同样的效果。

参考