Go 函数的定义与调用
1. 函数定义
Go 语言使用 func 关键字定义函数,基本语法:
func 函数名(参数列表) [返回值类型] {
// 函数体
}
关键特性:
- 参数:支持多个参数,格式
参数名 类型 - 返回值:
- 单返回值:直接声明类型
- 多返回值:用括号包裹类型
(类型1, 类型2)
- 命名返回值:可直接在返回值声明中命名变量
示例定义:
// 单返回值函数
func add(a int, b int) int {
return a + b
}
// 多返回值函数
func swap(x, y string) (string, string) {
return y, x
}
// 命名返回值
func divide(dividend, divisor float64) (result float64, err error) {
if divisor == 0 {
err = errors.New("除数不能为零")
return
}
result = dividend / divisor
return
}
2. 函数调用
直接通过函数名和参数列表调用:
// 调用单返回值函数
sum := add(3, 5) // sum = 8
// 调用多返回值函数
a, b := swap("hello", "world") // a="world", b="hello"
// 调用命名返回值函数
res, err := divide(10.0, 2.0)
if err != nil {
fmt.Println("错误:", err)
} else {
fmt.Println("结果:", res) // 输出 5.0
}
3. 特殊函数类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 匿名函数 | 无需命名,直接定义使用 | func(x int) { ... }(5) |
| 闭包 | 捕获外部变量的函数 | 见下方示例 |
| 方法 | 绑定到结构体的函数 | func (s Struct) f(){} |
闭包示例:
func accumulator() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
// 使用闭包
acc := accumulator()
fmt.Println(acc(1)) // 1
fmt.Println(acc(2)) // 3
4. 最佳实践
- 错误处理:多返回值函数中,最后一个返回类型通常为
error - 参数简写:相同类型参数可合并声明
func f(a, b int) - 空白标识符:忽略不需要的返回值:
res, _ := swap("a", "b")
通过函数封装逻辑单元,是 Go 语言模块化设计的核心机制。合理使用函数返回值、错误处理和闭包特性,可显著提升代码质量。

被折叠的 条评论
为什么被折叠?



