当前位置: 首页 > article >正文

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

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


一、语法格式

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

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


二、基础示例:求和函数

func sum(nums ...int) int {total := 0for _, 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
多个可变参数不支持,只能定义一个

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

http://www.lryc.cn/news/2380285.html

相关文章:

  • [ctfshow web入门] web75
  • 交流学习 | 江西同为科技有限公司赴海尔总部考察交流
  • React方向:react的基本语法-数据渲染
  • Java求职面试:从核心技术到大数据与AI的场景应用
  • Ubuntu 20.04之Docker安装ES7.17.14和Kibana7.17.14
  • RK3568-鸿蒙5.1镜像烧录与调试
  • 游戏引擎学习第294天:增加手套
  • C# Try Catch Finally 执行顺序是什么?有返回值呢?
  • 水库雨水情测报与安全监测系统解决方案
  • 架构选择/区别
  • 嵌入式学习笔记 - STM32 ADC 模块工作模式总结
  • Python爬虫实战:获取taobao网最新rtx5060ti显卡销量数据并分析,为消费者做参考
  • IPLOOK | 2025 MVNOs 世界大会:从Wi-Fi通话到卫星覆盖
  • 零基础搭建!基于PP-ShiTuV2的轻量级图像识别系统(Docker+API部署指南)
  • 【C语言】贪吃蛇小游戏
  • Linux的日志管理
  • 大语言模型 07 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机训练 预训练 监督微调
  • [免费]苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 【RAG】RAG-MCP:基于检索增强生成来缓解大语言模型工具选择中的提示膨胀问题
  • 甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)
  • UI自动化测试中,一个完整的断言应所需要考虑的问题
  • AIGC与数字金融:人工智能金融创新的新纪元
  • CSS详解:特性、选择器与优先级
  • 手机怎么查看网络ip地址?安卓/iOS设备查询指南
  • React-useRef
  • 无损耗协议:PROFINET和EtherNet IP网关的高效安装指南
  • 【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】
  • std::ranges::iota
  • C++(24):容器类<list>
  • 【C++】不推荐使用的std::allocator<void>