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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了