目录
Go 语言中的函数是执行特定任务的基本构建块。函数可以接收输入参数,并返回一个或多个结果。函数可以是包级别的(顶级函数),也可以是局部的(在其他函数内部定义)。下面详细介绍 Go 语言中的函数定义、调用、多返回值、可变参数列表等功能。
函数定义
函数使用 func
关键字定义,后面跟函数名、参数列表和返回值类型。
基本格式
go
深色版本
1func functionName(parameters) (returnValues) {
2 // 函数体
3}
示例
go
深色版本
1package main
2
3import "fmt"
4
5// 定义一个函数,接受两个 int 参数,返回一个 int
6func add(x int, y int) int {
7 return x + y
8}
9
10func main() {
11 sum := add(10, 20)
12 fmt.Println(sum) // 输出 30
13}
函数参数
函数可以接受任意数量的参数,每个参数都有一个类型和名称。
示例
go
深色版本
1func greet(name string, age int) {
2 fmt.Printf("Hello, %s! You are %d years old.\n", name, age)
3}
4
5func main() {
6 greet("Alice", 30) // 输出 Hello, Alice! You are 30 years old.
7}
返回值
函数可以返回一个或多个值。如果没有返回值,可以省略括号中的返回值部分。
示例:多返回值
go
深色版本
1func divide(dividend int, divisor int) (int, error) {
2 if divisor == 0 {
3 return 0, fmt.Errorf("cannot divide by zero")
4 }
5 return dividend / divisor, nil
6}
7
8func main() {
9 result, err := divide(100, 5)
10 if err != nil {
11 fmt.Println(err)
12 } else {
13 fmt.Println(result) // 输出 20
14 }
15}
可变参数列表
使用 ...
符号可以定义一个接收可变数量参数的函数。这些参数会被收集到一个切片中。
示例:可变参数列表
go
深色版本
1func sum(numbers ...int) int {
2 total := 0
3 for _, number := range numbers {
4 total += number
5 }
6 return total
7}
8
9func main() {
10 fmt.Println(sum(1, 2, 3, 4, 5)) // 输出 15
11}
闭包
闭包是一个函数,它可以访问其词法作用域中的变量。在 Go 中,闭包可以非常方便地定义。
示例:闭包
go
深色版本
1func counter() func() int {
2 count := 0
3 return func() int {
4 count++
5 return count
6 }
7}
8
9func main() {
10 nextCount := counter()
11 fmt.Println(nextCount()) // 输出 1
12 fmt.Println(nextCount()) // 输出 2
13}
匿名函数
可以在定义时立即调用的函数称为匿名函数。匿名函数可以在任何地方定义,并且可以赋值给一个变量。
示例:匿名函数
go
深色版本
1func main() {
2 add := func(x, y int) int {
3 return x + y
4 }
5
6 fmt.Println(add(10, 20)) // 输出 30
7}
延迟执行(defer)
defer
语句可以延迟一个函数的执行,直到其所在函数即将返回之前执行。
示例:延迟执行
go
深色版本
1func main() {
2 defer fmt.Println("世界") // 这句话会在最后打印出来
3
4 fmt.Println("你好")
5}
6
7// 输出:你好
8// 世界
错误处理
在 Go 中,通常使用 (value, error)
的形式来处理错误,其中 error
类型是一个标准接口,表示一个错误。
示例:错误处理
go
深色版本
1func readFile(filename string) (string, error) {
2 // 假设这个函数是从文件中读取内容
3 // 返回内容字符串和错误
4 return "", nil
5}
6
7func main() {
8 content, err := readFile("example.txt")
9 if err != nil {
10 fmt.Println("读取文件失败:", err)
11 } else {
12 fmt.Println(content)
13 }
14}
以上就是 Go 语言中函数的基本介绍。函数是 Go 语言中非常重要的组成部分,掌握函数的定义、调用和相关特性对于编写 Go 程序至关重要。