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

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

相关推荐
karmueo461 小时前
视频序列和射频信号多模态融合算法Fusion-Vital解读
算法·音视频·多模态
写代码的小球4 小时前
求模运算符c
算法
大千AI助手8 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
YuTaoShao9 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
生态遥感监测笔记9 小时前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
Tony沈哲10 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
刘海东刘海东10 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
pumpkin8451411 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
挺菜的11 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法