以下是我最近在 Go 中学到的 5 个小技巧,感觉挺有用且容易被大家忽略,在这里分享给大家。
计算数组元素的活可以交给编译器
在 Go 中,数组的使用并不多,大家都会选择使用 slice。在使用 slice 时,如果不想自己写数组中元素的个数,可以使用 […] ,编译器会帮你计数:
1 | package main |
使用 go run .代替 go run main.go
每当我开始用 Go 创建项目时,我都会先创建一个 main.go 文件:1
2
3
4
5
6
7
8
9
10
11package main
import "fmt"
func main() {
sayHello()
}
func sayHello() {
fmt.Println("Hello!")
}
但当 main.go 文件变大时,就要使用同一个 main 将结构体分割到多个文件。但是,如果我有以下文件:
main.go1
2
3
4
5package main
func main() {
sayHello()
}
say_hello.go1
2
3
4
5
6
7package main
import "fmt"
func sayHello() {
fmt.Println("Hello!")
}
输入 go run main.go 会出现以下错误:1
2# command-line-arguments
./main.go:4:2: undefined: sayHello
解决这个问题,需要使用 go run .
使用下划线使数字清晰易读
1 | package main |
在同一个包中使用不同的 test package
之前以为每个文件夹只能有一个 go package。后来发现对于名为 yourpackage
的包,你可以在同一目录下拥有另一个名为 yourpackage_test
的包,并在其中编写测试。
为什么要这么做呢?因为这样可以使用相同的包 yourpackage 来编写测试,所以未导出的函数也会可用。通过在 yourpackage_test 中编写测试,可以确保只测试暴露的行为。
多次传递相同参数
在使用字符串格式化函数时,总觉得必须重复使用多次的参数是很繁琐的事情:1
2
3
4
5
6
7
8package main
import "fmt"
func main() {
name := "Bob"
fmt.Printf("My name is %s. Yes, you heard that right: %s\n", name, name)
}
还有一种更方便的方法。可以只传递一次参数,并在 %s 动词中使用 %[order]s:
1 | package main |
希望大家今天能学到一些新东西。如果你也有一些 golang 小技巧,可以在评论区留言分享!