Go 语言中的函数是程序的基本构建块,它封装了代码逻辑并通过名称来调用。函数可以接收输入参数,执行操作,并返回输出。Go 语言的函数具有简洁而强大的特性,支持多值返回、命名返回值以及匿名函数等功能。
📖 目录
1. 函数定义
在 Go 语言中,函数的定义使用 func
关键字,后面跟着函数名称、参数列表、返回值类型和函数体。
1.1 基本语法
func 函数名(参数1 类型, 参数2 类型) 返回值类型 {
// 函数体
}
示例:
package main
import "fmt"
func greet(name string) {
fmt.Println("Hello,", name)
}
func main() {
greet("Alice") // 调用 greet 函数
}
输出:
Hello, Alice
2. 函数参数
Go 语言函数的参数可以有多个,参数类型紧跟在参数名后。Go 支持按值传递和按引用传递参数,默认是按值传递。
2.1 单个参数
func add(a int) int {
return a + 10
}
2.2 多个参数
func add(a int, b int) int {
return a + b
}
2.3 参数类型简写
在多个参数类型相同的情况下,可以简化语法,合并类型定义。
func add(a, b int) int {
return a + b
}
3. 函数返回值
Go 函数可以有返回值,也可以没有返回值。返回值类型在函数定义时指定,可以是单个值或多个值。
3.1 单个返回值
func multiply(a, b int) int {
return a * b
}
3.2 多个返回值
Go 支持函数返回多个值,这使得错误处理更加简洁。
func divide(a, b int) (int, int) {
if b == 0 {
return 0, 0
}
return a / b, a % b
}
示例:
package main
import "fmt"
func divide(a, b int) (int, int) {
if b == 0 {
return 0, 0
}
return a / b, a % b
}
func main() {
quotient, remainder := divide(10, 3)
fmt.Println("Quotient:", quotient)
fmt.Println("Remainder:", remainder)
}
输出:
Quotient: 3
Remainder: 1
4. 命名返回值
Go 语言允许在函数返回值中使用命名返回值(即提前声明返回变量)。这样在函数内部可以直接修改返回变量的值,返回时不需要再使用 return
显式返回。
示例:
package main
import "fmt"
func calculate(a, b int) (sum int, diff int) {
sum = a + b
diff = a - b
return // 使用命名返回值
}
func main() {
sum, diff := calculate(10, 5)
fmt.Println("Sum:", sum)
fmt.Println("Difference:", diff)
}
输出:
Sum: 15
Difference: 5
5. 多个返回值
Go 的函数支持多个返回值,在函数调用时可以直接捕获多个返回值。常见的用途包括错误处理(例如返回值中包含错误对象)。
示例:
package main
import (
"fmt"
"errors"
)
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
result, err = divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
输出:
Result: 5
Error: division by zero
6. 匿名函数
匿名函数是没有名称的函数,可以在定义时立即调用。它们非常适用于短小的临时任务,尤其是在 Go 中经常与闭包一起使用。
示例:
package main
import "fmt"
func main() {
// 定义匿名函数并立即调用
func(a, b int) {
fmt.Println("Sum:", a+b)
}(3, 4)
}
输出:
Sum: 7
示例 2:匿名函数与闭包
package main
import "fmt"
func main() {
add := func(a, b int) int {
return a + b
}
fmt.Println(add(2, 3))
}
输出:
5
7. 函数类型
Go 允许定义函数类型,可以将函数作为参数传递,或者将其作为返回值。函数类型可以用于定义接口和更复杂的回调机制。
示例:
package main
import "fmt"
// 定义一个函数类型
type Operation func(int, int) int
func add(a, b int) int {
return a + b
}
func subtract(a, b int) int {
return a - b
}
func main() {
var op Operation = add
fmt.Println("Addition:", op(10, 5))
op = subtract
fmt.Println("Subtraction:", op(10, 5))
}
输出:
Addition: 15
Subtraction: 5
8. 参考资料
Go 语言的函数非常灵活且强大,通过支持多值返回、命名返回值、匿名函数等功能,使得函数在处理复杂任务时更加方便和简洁。掌握这些函数特性,将使得你在编写 Go 程序时更加得心应手。
发表回复