以下是我在网上学习 Go 中学到的 5 个小技巧。
让编译器计算数组元素
在 Go 中很少会使用数组,使用较多的是切片。如果不喜欢自己编写数组中的元素数量,则可以使用 [...]
,编译器会自动计算数组的元素个数:
package main
import "fmt"
func main() {
arr := [3]int{1, 2, 3}
sameArr := [...]int{1, 2, 3} // 使用 ... 替代 3
// 等价输出
fmt.Println(arr)
fmt.Println(sameArr)
}
使用 go run . 替代 go run main.go
当我们写一个小 demo 时,比较喜欢的是从 main.go
文件开始:
package main
import "fmt"
func main() {
sayHello()
}
func sayHello() {
fmt.Println("Hello!")
}
但是当 main.go
文件变大时,我们将会使用 main
包将代码拆分为多个文件,例如,我们有以下文件:main.go
:
package main
func main() {
sayHello()
}
say_hello.go
:
package main
import "fmt"
func sayHello() {
fmt.Println("Hello!")
}
现在,我们输入 go run main.go
将会出现以下错误:
# command-line-arguments
./main.go:4:2: undefined: sayHello
要解决此问题,除了列出全部文件 go run main.go say_hello.go
,还可以使用 go run .
。
使用下划线让数字可读
代码语言:javascript复制package main
import "fmt"
func main() {
number := 10000000
better := 10_000_000
fmt.Println(number == better)
}
同一个包中可以有不同的测试包
在 Go 中,我认为每个文件夹只能有 1 个包,但这并不完全正确。对于名为 yourpackage
的包,我们可以在同一目录中拥有另一个名为 yourpackage_test
的包,我们可以在其中编写测试。尽管我们可以相同的包 yourpackage
编写测试,但这回导致包中有未导出的函数也可以直接使用。通过在 yourpackage_test
中编写测试,则可以仅测试公开的函数。
多次传递相同的参数
当使用字符串格式化函数时,我总是觉得很烦人,因为我必须重复使用多次的参数:
代码语言:javascript复制package main
import "fmt"
func main() {
name := "Bob"
fmt.Printf("My name is %s. Yes, you heard that right: %sn", name, name)
}
显然,还有一种更方便的方法。您可以只传递一次,并在 %s
动词中使用 %[order]s
:
package main
import "fmt"
func main() {
name := "Bob"
fmt.Printf("My name is %[1]s. Yes, you heard that right: %[1]sn", name)
}