本文摘抄自鸟窝的 Go语言编程技巧
以下仅记录几个自己认为比较重要的点。
从空间上讲可以节约内存,一般的话可以使用 betteralign 来检测效率低下的对齐方式,并帮助自动重新排序以提高效率。但是注意为了效率而重新排序并不总是必要的。“毕竟,优雅还是最重要的”
func main() {
defer TrackTime(time.Now()) // <--- THIS
time.Sleep(500 * time.Millisecond)
}
func TrackTime(pre time.Time) time.Duration {
elapsed := time.Since(pre)
fmt.Println("elapsed:", elapsed)
return elapsed
}
// elapsed: 501.11125ms
一种更好的方法,可以记录辅助字符串,并且不需要自己再调用time.now()获得开始时间
func TrackTime(name string) func() {
start := time.Now()
return func() {
fmt.Printf("%s took %v\n", name, time.Since(start))
}
}
func main() {
defer TrackTime("main")() // 也是一行代码
time.Sleep(time.Second * 2)
}
个人感觉通过使用方法链可以使代码更加通畅,类似java的
lambada表达式。
[0]func() 有3个特性:
- 非导出的: 对于你的结构体的使用者来说是隐藏的。
- 零宽度(或无成本): 因为长度为0,所以这个数组在内存中不占用任何空间。
- 不可比较: func()是一个函数类型,而函数在Go中是不可比较的。
go install golang.org/x/tools/cmd/deadcode@latest