Go 1.16 新特性查缺补漏
本订阅号的前两篇文章已经介绍了Go 1.16将要带来的变化。但是仍有两条遗漏。本文在这里简单介绍一下。
1 . 简化的结构体字段标签写法
从Go 1.16开始,结构体字段的标签中的值相同的键值对可以合并写成一个。比如,在Go 1.16之前的代码
type MyStruct struct {
Field1 string `json:"field_1,omitempty" bson:"field_1,omitempty" xml:"field_1,omitempty"`
}
从Go 1.16开始可以写成:
type MyStruct struct {
Field1 string `json bson xml:"field_1,omitempty"`
}
相关issue: https://github.com/golang/go/issues/40281
2 . 新的GODEBUG环境变量选项inittrace=1
从Go官方工具链1.16开始,当GODEBUG环境变量包含inittrace=1时,Go运行时将会报告各个源代码文件中的init函数的执行时间和内存开辟消耗情况。比如对于下面的程序:
package main
func init() {
println("hello")
}
func main() {
println("bye")
}
使用下面的命令运行之(Linux系统,Go tip rev:7f688d18c0):
$ GODEBUG=inittrace=1 go run main.go
的输出为:
init internal/bytealg @0.018 ms, 0 ms clock, 0 bytes, 0 allocs
init runtime @0.15 ms, 0.56 ms clock, 0 bytes, 0 allocs
init errors @1.7 ms, 0.010 ms clock, 0 bytes, 0 allocs
init sync @1.8 ms, 0.001 ms clock, 16 bytes, 1 allocs
init internal/oserror @1.8 ms, 0.001 ms clock, 80 bytes, 5 allocs
init syscall @1.9 ms, 0.010 ms clock, 944 bytes, 2 allocs
init time @1.9 ms, 0.014 ms clock, 400 bytes, 8 allocs
init context @2.0 ms, 0.002 ms clock, 128 bytes, 4 allocs
init math @2.0 ms, 0 ms clock, 0 bytes, 0 allocs
init strconv @2.1 ms, 0.006 ms clock, 32 bytes, 2 allocs
init unicode @2.1 ms, 0.086 ms clock, 23944 bytes, 27 allocs
...
init internal/bytealg @0 ms, 0 ms clock, 0 bytes, 0 allocs
init runtime @0.048 ms, 0.042 ms clock, 0 bytes, 0 allocs
hello
init main @0.21 ms, 0.004 ms clock, 0 bytes, 0 allocs
bye
此GODEBUG环境变量选项对于查找init函数中的瓶颈很有帮助。
相关issue: https://github.com/golang/go/issues/41378
本文首发在微信Go 101公众号,欢迎各位转载本文。Go 101公众号将不定期发表一些原创短文,包含Go语言中的事实、细节和技巧等。有意关注者请扫描下面的二维码。
关于更多Go语言编程中的事实、细节和技巧,请访问《Go语言101》官方网站 https://gfw.go101.org (可点击下面的原文链接直接访问)或者项目地址 https://github.com/golang101/golang101。
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
因为新开的微信公众号不再支持留言,所以若有问题,可到上述项目中创建一个issue留言交流。
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
本书PDF下载地址:https://github.com/golang101/golang101/releases