Go 1.15中哪些变化是值得你关注的?

  这是来自 Go Remote Fest 会议地分享整理,原标题:《What’s coming in Go 1.15》,虽然很多人对 Go 二进制文件为什么“那么大”存在疑问,但不是软盘年代,这点空间真不需要在意。不过 Go 团队还是做了一些努力。

  package main

  import (

  "io"

  "net/http"

  "os"

  )

  func main() {

  resp, _ := http.Get("golang/dl/")

  io.Copy(os.Stdout, resp.Body)

  }

  看看结果对比:

  $ go version

  go version go1.14.2 linux/amd64

  $ gotip version

  go version devel +49f10f3797 Sat Apr 25 02:19:12 2020 +0000 linux/amd64

  $ go build -ldflags='-w -s' -o 114

  $ gotip build -ldflags='-w -s' -o 115

  $ du -b 114 115

  5111808 114

  5009408 115

  2% 左右,虽然不多,但还在考虑进一步减小。

  增加了一个新包:time/tzdata,当系统找不到时区数据时(比如 Windows 等),通过导入这个包,在程序中内嵌时区数据,也可以通过编译时传递 -tags timetzdata 来实现同样的效果。

  具体查看这个 issue:

  github/golang/go/issues/38017 以及包 time/tzdata 的说明:

  tip.golang/pkg/time/tzdata/。

  ##4、增加 testing.TB.TempDir

  测试生成临时文件挺常见的,这个为了更好的解决此问题。详情见 issue:

  github/golang/go/issues/35998。

  将 context 引入 testing 包。详情见 issue:

  github/golang/go/issues/28135。

  darwin/386、darwin/arm 不再支持;riscv64 变得更好;linux/arm64 现在作为第一类 port 支持。

  1)net/url.URL RawFragment 和 EscapedFragment ,详情见 issue:

  github/golang/go/issues/37776;

  2)net/url.URL.Redacted,详情见 issue:

  github/golang/go/issues/34855;

  3)time.Ticker.Reset,我们知道 Timer 是有 Reset 的,这次为 Ticker 也增加,详情见 issue:

  github/golang/go/issues/33184;

  4)regexp.Regexp.SubexpIndex,详情见 issue:

  github/golang/go/issues/32420;

  5)sync.Map.LoadAndDelete,详情见 issue:

  github/golang/go/issues/33762;

  6)

  crypto/tls.Dialer.DialContext,详情见 issue:

  github/golang/go/issues/18482;

  还有其他一些 API 变动,不一一列举。

  1)增加 go env GOMODCACHE:

  github/golang/go/issues/34527;

  2)opt-in fallbacks in GOPROXY:github/golang/go/issues/37367;

  3)vet:warn about string(int) 和 detect impossible interface assertions:

  github/golang/go/issues/32479 和

  github/golang/go/issues/4483;

  4)println 允许打印两个值。println(twoValues());

  5)panic:显示可打印的值而不是地址。比如:

  type MyString string

  panic(MyString("hello"))

  现在打印:

  panic: (main.MyString) (0x48aa00,0x4c0840)

  期望打印:

  panic: main.MyString("hello")

  可读性会好很多。

  1)在 amd64 上更好的写屏蔽;

  2)在 Linux 上,forkAndExec 使用 dup3;

  3)sha512 算法速度提升 15%;

  4)ReadMemStats 延迟降低 95%;

  5)关闭状态的 channel 接收速度提升 99%;

  6)将小的 int 值转为 interface{} 不额外分配内存;

  可以通过执行如下命令提前使用 Go1.15:

  go get golang/dl/gotip

posted @ 2022-02-11 19:39  ebuybay  阅读(87)  评论(0编辑  收藏  举报