在Go语言里,函数是组织代码的基本单元,无论是实现业务逻辑还是封装工具方法,都需要通过函数来完成。Go的函数定义语法简洁且有明确的规则,参数和返回值的设计也兼顾了实用性和可读性。

Go函数的基础定义语法
Go语言定义函数使用func关键字,基本结构如下:
func 函数名(参数列表) 返回值列表 {
函数体
return 返回值
}
函数名需要遵循Go的标识符命名规则,首字母大写表示该函数可以被其他包访问,首字母小写则仅在当前包内可见。参数列表中的每个参数都需要指定参数名和参数类型,多个参数之间用逗号分隔。
无参数无返回值的函数示例
package main
import "fmt"
// 无参数无返回值的函数
func printHello() {
fmt.Println("Hello, Go function")
}
func main() {
printHello()
}
Go函数参数解析
Go函数的参数传递只有值传递一种方式,传递的是参数的副本,修改函数内的参数不会影响原变量。如果参数是引用类型(如切片、map、指针),传递的是引用本身的副本,修改引用指向的内容会影响原变量。
普通参数传递
package main
import "fmt"
// 接收两个int类型参数的函数
func add(a int, b int) int {
return a + b
}
func main() {
x := 10
y := 20
result := add(x, y)
fmt.Println(result) // 输出30
}
相同类型的相邻参数可以合并类型声明,上面的add函数也可以写成func add(a, b int) int的形式。
可变参数
Go支持可变参数,可变参数需要放在参数列表的最后一位,类型是[]类型:
package main
import "fmt"
// 接收可变int参数的函数,sum为[]int类型
func sum(nums ...int) int {
total := 0
for _, v := range nums {
total += v
}
return total
}
func main() {
fmt.Println(sum(1, 2, 3)) // 输出6
fmt.Println(sum(10, 20, 30, 40)) // 输出100
}
Go函数返回值解析
Go函数的返回值可以有多个,返回值列表需要指定每个返回值的类型,多个返回值类型用括号包裹。
多返回值
package main
import "fmt"
// 返回两个int值的函数,第一个是商,第二个是余数
func divide(a, b int) (int, int) {
quotient := a / b
remainder := a % b
return quotient, remainder
}
func main() {
q, r := divide(10, 3)
fmt.Printf("商:%d,余数:%dn", q, r) // 输出商:3,余数:1
}
命名返回值
Go支持给返回值命名,命名返回值会被隐式初始化为零值,函数体中可以直接使用返回值名,最后用return即可返回,不需要显式写出返回值:
package main
import "fmt"
// 命名返回值,res和err是返回值名
func calc(a, b int) (res int, err error) {
if b == 0 {
err = fmt.Errorf("除数不能为0")
return
}
res = a / b
return
}
func main() {
r, e := calc(10, 2)
if e != nil {
fmt.Println(e)
return
}
fmt.Println(r) // 输出5
}
常见注意事项
- 函数的返回值如果只有一个,且不是命名返回值,返回值列表的括号可以省略。
- 调用多返回值的函数时,如果不需要某个返回值,可以用下划线
_忽略。 - 函数可以作为参数传递给其他函数,也可以作为返回值返回,这是Go函数式编程的基础特性。
函数作为参数示例
package main
import "fmt"
// 接收一个函数作为参数,该函数接收两个int返回int
func operate(a, b int, op func(int, int) int) int {
return op(a, b)
}
func add(x, y int) int {
return x + y
}
func main() {
result := operate(5, 3, add)
fmt.Println(result) // 输出8
}
GolangGo_function参数返回值函数定义修改时间:2026-07-04 20:18:23