Go 函数
基本语法
func 函数名(参数列表) 返回值类型 {
函数体
}
示例:
func add(a int, b int) int {
return a + b
}
调用:
result := add(10, 20)
fmt.Println(result)
输出:
30
相同类型参数简写
多个参数类型相同时,可以只写一次类型:
func add(a, b int) int {
return a + b
}
等价于:
func add(a int, b int) int {
return a + b
}
无参数无返回值
func hello() {
fmt.Println("hello")
}
调用:
hello()
有参数无返回值
func printName(name string) {
fmt.Println(name)
}
无参数有返回值
func getName() string {
return "Tom"
}
调用:
name := getName()
多个返回值
Go 支持一个函数返回多个值。
func calc(a, b int) (int, int) {
return a + b, a - b
}
调用:
sum, diff := calc(10, 5)
fmt.Println(sum)
fmt.Println(diff)
输出:
15
5
忽略返回值
使用 _ 忽略不需要的值。
sum, _ := calc(10, 5)
fmt.Println(sum)
命名返回值
返回值可以提前声明名称。
func calc(a, b int) (sum int, diff int) {
sum = a + b
diff = a - b
return
}
等价于:
func calc(a, b int) (int, int) {
return a + b, a - b
}
一般不建议滥用命名返回值,逻辑简单时使用即可。
error 返回值
Go 中最常见的多返回值场景:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
调用:
result, err := divide(10, 2)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(result)
这是 Go 处理错误的标准模式。
可变参数
参数数量不固定时使用 ...
func sum(nums ...int) int {
total := 0
for _, num := range nums {
total += num
}
return total
}
调用:
fmt.Println(sum(1, 2, 3))
fmt.Println(sum(1, 2, 3, 4, 5))
输出:
6
15
总结
函数定义
func 函数名(参数) 返回值 {
}
单返回值
func add(a, b int) int {
return a + b
}
多返回值
func calc(a, b int) (int, int) {
return a + b, a - b
}
忽略返回值
sum, _ := calc(10, 5)
命名返回值
func calc(a, b int) (sum int, diff int) {
return
}
Go 最常见写法
func xxx(...) (结果, error) {
if 出错 {
return ..., err
}
return ..., nil
}
Go 的多返回值设计主要就是为了优雅地返回业务结果和错误信息,因此 (value, error) 是实际开发中最常见的函数签名。