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

news2025/5/20 22:31:27

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2380285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ctfshow web入门] web75

信息收集 启用了open_basedir,所以之前的方法又不能用了 解题 cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString(). ); } ob_flush();cif ( $a opendir("glob:///*") ) {while ( ($file readdir($a)) ! false …

交流学习 | 江西同为科技有限公司赴海尔总部考察交流

2025年4月8日至9日,江西同为科技有限公司在江西省科技装备商会的带领下,以蔡文君经理为代表,一行人赴山东青岛海尔总部开展两天的考察交流活动。本次考察不仅深入剖析了海尔企业的前沿技术与管理理念,更促进了行业内科技创新、商业…

React方向:react的基本语法-数据渲染

1、安装包(js库) yarn add babel-standalone react react-dom 示例图.png 2、通过依赖包导入js库文件 <script src"../node_modules/babel-standalone/babel.js"></script> <script src"../node_modules/react/umd/react.development.js"&g…

RK3568-鸿蒙5.1镜像烧录与调试

参考https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/docs/%E7%83%A7%E5%BD%95%E6%8C%87%E5%AF%BC%E6%96%87%E6%A1%A3.md https://blog.csdn.net/pengjiadashaoye/article/details/144448126 固件烧录 缺了3个 , 没找着,烧录试试看 ,看了参考也不太一样 缺了…

游戏引擎学习第294天:增加手套

准备战斗 我们正在进行的是第294天的开发&#xff0c;目前暂时没有特别确定要做的内容&#xff0c;但我们决定继续研究移动模式相关的部分。虽然一些小型实体系统已经在运行&#xff0c;但并不确定最终效果如何。 今天我们决定实现一个全新的功能&#xff1a;战斗系统。这是游…

C# Try Catch Finally 执行顺序是什么?有返回值呢?

Try Catch Finally 执行顺序是什么&#xff1f;有返回值呢&#xff1f; 大部分程序员都认为&#xff1a;C#异常处理执行顺序&#xff0c;很简单&#xff0c;没什么可说的。 正常情况&#xff1a;执行顺序为 1、3(下图) 异常情况&#xff1a;执行顺序为1、2、3 文章目录 Tr…

水库雨水情测报与安全监测系统解决方案

一、方案概述 本水库雨水情测报与安全监测解决方案的核心目标在于利用尖端的技术手段&#xff0c;确保对水库雨水情势以及大坝安全状况的持续监控和及时预警&#xff0c;从而为水库的稳定运行提供坚实的支持和保障。该方案严格遵循“统筹协调、因库制宜、实用有效、信息共享”的…

架构选择/区别

目录 一、分层架构&#xff08;Layered Architecture&#xff09; 二、微服务架构&#xff08;Microservices Architecture&#xff09; 三、分布式架构&#xff08;Distributed Architecture&#xff09; 四、单体架构&#xff08;Monolithic Architecture&#xff09; 五…

嵌入式学习笔记 - STM32 ADC 模块工作模式总结

ADC 模式总结&#xff1a; 一 单ADC模式&#xff08;是指ADC1,ADC2,ADC3中只有一个ADC被使用&#xff09; ①单通道&#xff1a; 非连续模式&#xff1a;非连续的意思就是单次&#xff0c;一次转换完成后就停止转换&#xff0c;除非再次被软件或者被外部触发启动&#xff1b…

IPLOOK | 2025 MVNOs 世界大会:从Wi-Fi通话到卫星覆盖

2025 MVNOs 世界大会于5月12日至14日在奥地利维也纳举行&#xff0c;汇聚了来自50多个国家的550余位行业领袖&#xff0c;共同探讨移动虚拟网络运营商&#xff08;MVNO&#xff09;领域的变革趋势。本届大会聚焦数字化转型、技术创新与战略合作&#xff0c;其中IPLOOK凭借其创新…

零基础搭建!基于PP-ShiTuV2的轻量级图像识别系统(Docker+API部署指南)

以下是对该图像分类识别系统的的简单介绍&#xff1a; PP-ShiTuV2 是一个由百度飞桨团队发布的实用轻量级通用图像识别系统&#xff0c;由主体检测、特征提取、向量检索三个模块构成&#xff0c;适用于快速构建轻量级、高精度、可落地的图像识别应用image_classification是一个…

【C语言】贪吃蛇小游戏

文章目录 前言一、贪吃蛇游戏代码test.c文件Snake.h文件Snake.c文件 二、相关函数的介绍1.COORD2.Win32 API的介绍3.GetStdHandle4.GetConsoleCursorInfo5.CONSOLE_CURSOR_INFO5.SetConsoleCursorInf6.SetConsoleCursorPosition7.GetAsyncKeyState 总结 前言 哈喽各位好呀。今…

大语言模型 07 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机训练 预训练 监督微调

写在前面 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是目前最广泛应用的大语言模型架构之一&#xff0c;其强大的自然语言理解与生成能力背后&#xff0c;是一个庞大而精细的训练流程。本文将从宏观到微观&#xff0c;系统讲解GPT的训练过程&#xff0c;…

[免费]苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端)&#xff0c;分享下哈。 项目视频演示 【免费】苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端Vue管理端) Java毕业设计…

【RAG】RAG-MCP:基于检索增强生成来缓解大语言模型工具选择中的提示膨胀问题

摘要 由于提示膨胀和选择复杂性&#xff0c;大型语言模型 (LLM) 难以有效利用越来越多的外部工具&#xff0c;例如模型上下文协议 (MCP)[1]中定义的那些工具。 我们引入了 RAG-MCP&#xff0c;这是一个检索增强生成框架&#xff0c;通过卸载工具发现来克服这一挑战。 RAG-MCP …

甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)

2025年甘特图工具的全面指南 在项目管理领域&#xff0c;甘特图作为最直观的任务规划和进度追踪工具&#xff0c;已成为团队协作和项目执行的核心手段。随着数字化技术的快速发展&#xff0c;2025年的甘特图工具市场呈现出前所未有的多元化和智能化趋势。从开源软件到云端协作…

AIGC与数字金融:人工智能金融创新的新纪元

AIGC与数字金融&#xff1a;人工智能金融创新的新纪元 引言 人工智能生成内容&#xff08;AIGC&#xff09;在数字金融领域发挥着关键作用&#xff0c;从金融内容生成到智能风控&#xff0c;从个性化服务到投资决策&#xff0c;AIGC正在重塑金融的方式和效果。本文将深入探讨A…

手机怎么查看网络ip地址?安卓/iOS设备查询指南

在移动互联网时代&#xff0c;IP地址作为设备的网络身份证&#xff0c;无论是网络调试、远程连接还是排查故障都至关重要。本文将系统介绍安卓和iOS设备查看IP地址的多种方法&#xff0c;帮助您快速掌握这一实用技能。 一、安卓手机查看IP地址方法 1、通过WiFi设置查看 打开设…

无损耗协议:PROFINET和EtherNet IP网关的高效安装指南

作为风力发电机组监控系统的重要组成部分&#xff0c;PROFINET和EtherNet/IP协议转换网关倍讯BX-606-EIP的安装至关重要。作为安装工,我们要确保网关安装的高效顺利,保证风力发电机组的稳定运行。 首先,我们需要仔细检查网关的硬件接口,确保所有连接线缆与设备端口相匹配。网关…

【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…