全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-13 分钟 ✍️ juanwangdev

Go函数参数与返回值

Go函数支持多参数、多返回值,语法灵活。

参数传递

基本参数

Go
func greet(name string) {
    fmt.Println("Hello, ", name)
}

greet("Tom")  // 调用

多参数

Go
// 多个参数
func add(a, b int) int {
    return a + b
}

// 相同类型合并
func print(a, b, c int) {
    fmt.Println(a, b, c)
}

// 不同类型分开写
func info(name string, age int) {
    fmt.Println(name, age)
}

参数传递方式

Go
// Go只有值传递
// 传递的是值的副本

func modify(n int) {
    n = 100  // 修改副本
}

func main() {
    x := 10
    modify(x)
    fmt.Println(x)  // 10,不变
}

Go只有值传递,指针传递本质上也是传递指针值的副本。

指针参数

Go
// 使用指针可修改原值
func modify(n *int) {
    *n = 100
}

func main() {
    x := 10
    modify(&x)
    fmt.Println(x)  // 100,已修改
}

返回值

单返回值

Go
func add(a, b int) int {
    return a + b
}

result := add(1, 2)

多返回值

Go
// 返回多个值
func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("除数不能为0")
    }
    return a / b, nil
}

// 接收多返回值
result, err := divide(10, 2)
if err != nil {
    fmt.Println(err)
}

命名返回值

Go
// 命名返回值
func add(a, b int) (sum int) {
    sum = a + b
    return  // 起名后可省略返回值名
}

// 等价于
func add(a, b int) (sum int) {
    sum = a + b
    return sum
}

命名返回值会在函数开头初始化为零值。

命名返回值示例

Go
func calculate(a, b int) (sum, diff int) {
    sum = a + b
    diff = a - b
    return  // 自动返回sum和diff
}

s, d := calculate(10, 5)
fmt.Println(s, d)  // 15 5

可变参数

基本语法

Go
// 可变参数用...表示
func sum(nums ...int) int {
    total := 0
    for _, n := range nums {
        total += n
    }
    return total
}

// 调用
sum(1)          // 1个参数
sum(1, 2, 3)    // 多个参数
sum(1, 2, 3, 4, 5)  // 任意数量

传递slice

Go
nums := []int{1, 2, 3, 4}
sum(nums...)  // 展开slice传递

参数与返回值对比

类型语法示例
单参数func f(a int)基本参数
多参数func f(a, b int)类型合并
多类型参数func f(a int, b string)分开写
指针参数func f(a *int)可修改原值
单返回值func f() int返回一个值
多返回值func f() (int, error)返回多个值
命名返回值func f() (n int)可省略return
可变参数func f(nums ...int)任意数量

init函数用法

初始化变量

Go
var config Config

func init() {
    config = loadConfig()
}

func main() {
    // config已初始化
    run(config)
}

多个init

Go
// 同一文件可以有多个init
func init() {
    fmt.Println("init 1")
}

func init() {
    fmt.Println("init 2")
}

// 按声明顺序执行

要点总结

  • Go只有值传递,传递副本
  • 指针参数可修改原值
  • 支持多返回值,常用(int, error)
  • 命名返回值可省略return后写变量名
  • 可变参数用...nums接收任意数量
  • slice传递给可变参数用nums...展开
  • init函数在main前自动执行
  • 多个init按声明顺序执行

📝 发现内容有误?点击此处直接编辑

← 上一篇 Go函数作为值与高阶函数
下一篇 → Go函数定义与声明
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库