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

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


一、语法格式

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

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


二、基础示例:求和函数

复制代码
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
多个可变参数 不支持,只能定义一个

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

相关推荐
程序猿阿森1 分钟前
【机器学习实战】朴素贝叶斯算法详解:从概率基础到商品评论情感分析
算法·机器学习·概率论
xxwl58512 分钟前
区域赛算法模版第五章---数学与数论
c++·笔记·算法
看浪的路人36 分钟前
第6讲:Agent 安全体系——Prompt 注入防御、工具调用审计与输出合规
人工智能·算法
局部有解1 小时前
LeetCode Hot100 438 找到字符串中所有字母异位词
c++·算法·leetcode
垆边人似月.1 小时前
移动长度 k 子串使字符串变成回文
数据结构·算法
pride.li1 小时前
第12章 Python 教程-流程控制:循环结构
linux·服务器·python·算法
海绵宝宝转agent2 小时前
2026-10-16 4算法+1面经
算法
小poop2 小时前
基础排序算法详解——插入、选择与交换排序
算法·排序算法
青蓝智慧马老师2 小时前
想学数据分析但零基础,正确顺序不是先学 Python
大数据·人工智能·算法
jeo陽2 小时前
05-数组与冒泡排序:第一个数据结构与经典算法
c语言·数据结构·算法