分享最近学到的 5 个 Golang 小技巧
2024-6-12 11:44:28 Author: cloudsjhan.github.io(查看原文) 阅读量:26 收藏

发表于 | 分类于 | 阅读次数: |

| 字数统计: 638 | 阅读时长 ≈ 3

以下是我最近在 Go 中学到的 5 个小技巧,感觉挺有用且容易被大家忽略,在这里分享给大家。

计算数组元素的活可以交给编译器

在 Go 中,数组的使用并不多,大家都会选择使用 slice。在使用 slice 时,如果不想自己写数组中元素的个数,可以使用 […] ,编译器会帮你计数:

1
2
3
4
5
6
7
8
9
10
11
12
package main

import "fmt"

func main() {
arr := [3]int{1, 2, 3}
sameArr := [...]int{1, 2, 3} // Use ... instead of 3

// Arrays are equivalent
fmt.Println(arr)
fmt.Println(sameArr)
}

使用 go run .代替 go run main.go

每当我开始用 Go 创建项目时,我都会先创建一个 main.go 文件:

1
2
3
4
5
6
7
8
9
10
11
package main

import "fmt"

func main() {
sayHello()
}

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

但当 main.go 文件变大时,就要使用同一个 main 将结构体分割到多个文件。但是,如果我有以下文件:

main.go

1
2
3
4
5
package main

func main() {
sayHello()
}

say_hello.go

1
2
3
4
5
6
7
package 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
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
number := 10000000
better := 10_000_000

fmt.Println(number == better)
}

在同一个包中使用不同的 test package

之前以为每个文件夹只能有一个 go package。后来发现对于名为 yourpackage 的包,你可以在同一目录下拥有另一个名为 yourpackage_test 的包,并在其中编写测试。
为什么要这么做呢?因为这样可以使用相同的包 yourpackage 来编写测试,所以未导出的函数也会可用。通过在 yourpackage_test 中编写测试,可以确保只测试暴露的行为。

多次传递相同参数

在使用字符串格式化函数时,总觉得必须重复使用多次的参数是很繁琐的事情:

1
2
3
4
5
6
7
8
package 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
2
3
4
5
6
7
8
package main

import "fmt"

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

希望大家今天能学到一些新东西。如果你也有一些 golang 小技巧,可以在评论区留言分享!


-------------The End-------------

cloud sjhan wechat

subscribe to my blog by scanning my public wechat account

0%


文章来源: https://cloudsjhan.github.io/2024/06/12/%E5%88%86%E4%BA%AB%E6%9C%80%E8%BF%91%E5%AD%A6%E5%88%B0%E7%9A%84-5-%E4%B8%AA-Golang-%E5%B0%8F%E6%8A%80%E5%B7%A7/
如有侵权请联系:admin#unsafe.sh