Go 中学到的5个小技巧

2024-08-01 18:54:19 浏览数 (2)

以下是我在网上学习 Go 中学到的 5 个小技巧。

让编译器计算数组元素

在 Go 中很少会使用数组,使用较多的是切片。如果不喜欢自己编写数组中的元素数量,则可以使用 [...],编译器会自动计算数组的元素个数:

代码语言:javascript复制
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 文件开始:

代码语言:javascript复制
package main

import "fmt"

func main() {
    sayHello()
}

func sayHello() {
    fmt.Println("Hello!")
}

但是当 main.go 文件变大时,我们将会使用 main 包将代码拆分为多个文件,例如,我们有以下文件:main.go

代码语言:javascript复制
package main

func main() {
    sayHello()
}

say_hello.go

代码语言:javascript复制
package main

import "fmt"

func sayHello() {
    fmt.Println("Hello!")
}

现在,我们输入 go run main.go 将会出现以下错误:

代码语言:javascript复制
# 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

代码语言:javascript复制
package main

import "fmt"

func main() {
    name := "Bob"
    fmt.Printf("My name is %[1]s. Yes, you heard that right: %[1]sn", name)
}

0 人点赞