Go语言编程技巧[节选]

106 阅读1分钟

本文摘抄自鸟窝的 Go语言编程技巧

以下仅记录几个自己认为比较重要的点。

  1. 将结构体中的字段按照从大到小的顺序排列

从空间上讲可以节约内存,一般的话可以使用 betteralign 来检测效率低下的对齐方式,并帮助自动重新排序以提高效率。但是注意为了效率而重新排序并不总是必要的。“毕竟,优雅还是最重要的”

  1. 一行代码测量函数的执行时间 image.png
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)
}
  1. 方法链

image.png

image.png 个人感觉通过使用方法链可以使代码更加通畅,类似java的lambada表达式。

  1. 使用结构体变长参数

image.png

  1. 使结构体不可比较

image.png

[0]func() 有3个特性:

  • 非导出的: 对于你的结构体的使用者来说是隐藏的。
  • 零宽度(或无成本): 因为长度为0,所以这个数组在内存中不占用任何空间。
  • 不可比较: func()是一个函数类型,而函数在Go中是不可比较的。
  1. 使用空字段防止结构体无键字

image.png

7.使用deadcode来找到和删除无用的函数

go install golang.org/x/tools/cmd/deadcode@latest

image.png