可变参数(Variadic Functions)- 《Go语言实战指南》

Go 语言允许函数接受不定数量的参数,也称"可变参数"。这为构建灵活的函数提供了便利,常用于求和、拼接等操作。


一、语法格式

复制代码
func 函数名(参数名 ...类型) 返回值类型 {
    // 函数体
}

可变参数本质上是一个切片(slice) ,可以使用 forrange 遍历。


二、基础示例:求和函数

复制代码
func sum(nums ...int) int {
    total := 0
    for _, v := range nums {
        total += v
    }
    return total
}

fmt.Println(sum(1, 2, 3))         // 输出 6
fmt.Println(sum(5, 10, 15, 20))   // 输出 50

三、可变参数的传递机制

传入的是零个或多个参数:

复制代码
fmt.Println(sum())                // 输出 0(空切片)

如果你已经有一个 []int 切片,可以通过 ... 传入:

复制代码
nums := []int{2, 4, 6}
fmt.Println(sum(nums...))        // 输出 12

四、与固定参数混用

可变参数可以与固定参数组合使用,但必须放在参数列表最后

复制代码
func greet(name string, messages ...string) {
    for _, msg := range messages {
        fmt.Printf("%s: %s\n", name, msg)
    }
}

greet("Alice", "早上好", "下午好", "晚安")

五、零参数情况的处理

如果调用时不传可变参数,函数仍能正常执行:

复制代码
greet("Bob") // 不输出任何内容

六、可变参数是切片(slice)

你可以对它执行切片操作、获取长度等:

复制代码
func debug(values ...int) {
    fmt.Println("总共参数:", len(values))
    fmt.Println("前两个参数:", values[:2])
}
debug(1, 2, 3, 4)

七、不能有多个可变参数

Go 不支持多个可变参数,以下写法是错误的:

复制代码
// ❌ 错误写法
func wrong(a ...int, b ...string) {}

八、小结

特性 说明
参数类型 func f(...type) 语法
调用方式 f(1, 2, 3)f(slice...)
与固定参数组合 可变参数必须在最后
零参数调用 可以调用,如 f()
实际类型 可变参数是一个切片 []type
多个可变参数 不支持,只能定义一个

可变参数让你的函数更灵活,适合用于处理动态长度的数据列表。

相关推荐
董董灿是个攻城狮36 分钟前
5分钟搞懂什么是窗口注意力?
算法
Dann Hiroaki42 分钟前
笔记分享: 哈尔滨工业大学CS31002编译原理——02. 语法分析
笔记·算法
qqxhb2 小时前
零基础数据结构与算法——第四章:基础算法-排序(上)
java·数据结构·算法·冒泡·插入·选择
FirstFrost --sy4 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
森焱森4 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
搂鱼1145145 小时前
(倍增)洛谷 P1613 跑路/P4155 国旗计划
算法
Yingye Zhu(HPXXZYY)5 小时前
Codeforces 2021 C Those Who Are With Us
数据结构·c++·算法
无聊的小坏坏6 小时前
三种方法详解最长回文子串问题
c++·算法·回文串
长路 ㅤ   6 小时前
Java后端技术博客汇总文档
分布式·算法·技术分享·编程学习·java后端
秋说6 小时前
【PTA数据结构 | C语言版】两枚硬币
c语言·数据结构·算法