可變參數(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.pswp.cn/web/80336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80336.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手機換IP真的有用嗎?可以干什么?

在當今數字化時代,網絡安全和個人隱私保護日益受到重視。手機作為我們日常生活中不可或缺的工具,其網絡活動痕跡往往通過IP地址被記錄和追蹤。那么,手機換IP真的有用嗎?它能為我們帶來哪些實際好處?本文將為你一一解答…

Linux517 rsync同步 rsync借xinetd托管 配置yum源回顧

計劃測試下定時服務 同步成功 是否為本地YUM源內容太少?考慮網絡YUM源 單詞拼錯了 計劃后面再看下 MX安裝 參考 計劃回顧配置YUM源 配置本地YUM源配置外網YUM源配置倉庫YUM源(不熟) 參考 參考阿里云 配置完畢 本地yum源配置 先備份 再…

第三部分:內容安全(第十六章:網絡型攻擊防范技術、第十七章:反病毒、第十八章:入侵檢測/防御系統(IDS/IPS))

文章目錄 第三部分:內容安全第十六章:網絡型攻擊防范技術網絡攻擊介紹流量型攻擊 --- Flood攻擊單包攻擊及防御原理掃描窺探攻擊畸形報文攻擊Smurf攻擊Land攻擊Fraggle攻擊IP欺騙攻擊 流量型攻擊防御原理DDoS通用攻擊防范技術 ---- 首包丟棄TCP類攻擊SYN…

c++成員函數返回類對象引用和直接返回類對象的區別

c成員函數返回類對象引用和直接返回類對象的區別 成員函數直接返回類對象&#xff08;返回臨時對象&#xff0c;對象拷貝&#xff09; #include <iostream> class MyInt { public:int value;//構造函數explicit MyInt(int v0) : value(v){}//加法操作,返回對象副本&…

阿里巴巴 1688 數據接口開發指南:構建自動化商品詳情采集系統

在電商行業數據驅動決策的趨勢下&#xff0c;高效獲取商品詳情數據成為企業洞察市場、優化運營的關鍵。通過阿里巴巴 1688 數據接口構建自動化商品詳情采集系統&#xff0c;能夠快速、精準地采集海量商品信息。本文將從開發準備、接口分析、代碼實現等方面&#xff0c;詳細介紹…

c語言 socket函數

c語言 socket函數 在 C 語言中,socket 函數是網絡編程的核心函數之一,用于創建一個網絡套接字(socket),它是網絡通信的端點。以下是關于 socket 函數的詳細介紹: 函數原型 #include <sys/socket.h>int socket(int domain, int type, int protocol);參數說明 domai…

Linux進程通訊和原子性

在Linux系統中&#xff0c;進程間通信&#xff08;IPC&#xff09;和原子性是并發編程中的核心問題。以下是對這些概念的詳細分步解釋&#xff1a; 一、進程間通信&#xff08;IPC&#xff09;方法 1. 管道&#xff08;Pipe&#xff09; 匿名管道&#xff1a;用于父子進程等有…

Java二叉樹題目練習

Java二叉題目練習 相同的樹對稱二叉樹平衡二叉樹二叉樹的最近公共祖先二叉樹的層序遍歷二叉樹層序遍歷 ||二叉樹遍歷 相同的樹 二叉樹的題目大多數時候就可以采用遞歸的方法寫 因為二叉樹是由根左子樹和右子樹組成&#xff0c;每一棵左子樹和右子樹又可以被看成一顆完整的樹&am…

【全網首發】解決coze工作流批量上傳excel數據文檔數據重復的問題

注意&#xff1a;目前方法將基于前一章批量數據庫導入的修改&#xff01;&#xff01;&#xff01;&#xff01;請先閱讀上篇文章的操作。抄襲注明來源 背景 上一節說的方法可以批量導入文件到數據庫&#xff0c;但是無法解決已經上傳的條目更新問題。簡單來說&#xff0c;不…

dockerdesktop 重新安裝

1、卸載 dockerdesktop 卸載時&#xff0c;最后一步刪除鏡像文件 會卡住 取消 2、在資源管理器中將鏡像文件路徑改名 如&#xff1a;e:\docker 修改 e:\docker1 3、重新安裝wsl wsl --shutdown 以管理員身份運行hy.bat pushd "%~dp0" dir /b %SystemRoot%\servic…

Linux docker常用命令

1、docker服務相關命令 啟動docker服務&#xff1a;systemctl start docker 停止docker服務&#xff1a;systemctl stop docker 重啟docker服務&#xff1a;systemctl restart docker 查看docker服務狀態&#xff1a;systemctl status docker 設置開機啟動docker服務&#xff1…

南京郵電大學金工實習答案

一、金工實習的定義 金工實習是機械類專業學生一項重要的實踐課程&#xff0c;它絕非僅僅只是理論知識在操作層面的簡單驗證&#xff0c;而是一個全方位培養學生綜合實踐能力與職業素養的系統工程。從本質上而言&#xff0c;金工實習是學生走出教室&#xff0c;親身踏入機械加…

Java EE初階——wait 和 notify

1. 線程饑餓 線程饑餓是指一個或多個線程因長期無法獲取所需資源&#xff08;如鎖&#xff0c;CPU時間等&#xff09;而持續處于等待狀態&#xff0c;導致其任務無法推進的現象。 典型場景 優先級搶占&#xff1a; 在支持線程優先級的系統中&#xff0c;高優先級線程可能持續…

MATLAB中heatmap函數

無論對表格還是對矩陣的可視化&#xff0c;都非常好用。 樣本特征 高斯核 https://ww2.mathworks.cn/help/matlab/creating_plots/create-heatmap-from-tabular-data.html

win11安裝Joplin Server私有化部署(docker)

摘要 本指南將幫助你在 Windows 11 系統 上通過 Docker Docker Compose 完成 Joplin Server 的本地搭建&#xff0c;并實現數據持久化、PostgreSQL 后端支持、用戶登錄與同步功能。 條件說明? 已安裝 Docker Desktop for Windows可從 Docker 官網 下載并安裝&#xff0c;建議…

嵌入式STM32學習——外部中斷EXTI與NVIC的基礎練習?

按鍵控制LED燈 按鍵控制LED的開發流程&#xff1a; 第一步&#xff1a;使能功能復用時鐘 第二布&#xff0c;配置復用寄存器 第三步&#xff0c;配置中斷屏蔽寄存器 固件庫按鍵控制LED燈 外部中斷EXTI結構體&#xff1a;typedef struct{uint32_t EXTI_Line; …

《Deepseek從入門到精通》清華大學中文pdf完整版

資源介紹&#xff1a; 《DeepSeek&#xff1a;從入門到精通》是由清華大學新聞與傳播學院新媒體研究中心元宇宙文化實驗室的精心撰寫的一份專業文檔。該文檔以通俗易懂的方 式&#xff0c;全面介紹了DeepSeek的使用方法&#xff0c;為用戶提供了極具價值的指導。 這份文檔內容豐…

Apache Pulsar 消息、流、存儲的融合

Apache Pulsar 消息、流、存儲的融合 消息隊列在大層面有兩種不同類型的應用&#xff0c;一種是在線系統的message queue&#xff0c;一種是流計算&#xff0c;data pipeline的streaming高throughout&#xff0c;一致性較低&#xff0c;延遲較差的過程。 存算分離 擴容和縮容快…

JavaScript vs Python 用于 Web Scraping(2025):終極對比指南

1. 引言 在不斷發展的 Web Scraping 領域&#xff0c;選擇合適的編程語言對于項目的成功至關重要。雖然 JavaScript 和 Python 在 2025 年仍然是 Web Scraping 領域的熱門選擇&#xff0c;但它們各自具備不同的優勢和挑戰。 本指南將深入分析 JavaScript 和 Python 的核心特性…

【RocketMQ Broker 相關源碼】- NettyRemotingClient 和 NettyRemotingServer

文章目錄 1. 前言2. BrokerOuterAPI2.1 NettyRemotingClient2.2 start 啟動2.2.1 NettyRemotingClient#start 3. NettyRemotingServer3.1 ClientHousekeepingService3.2 ProducerManager#doChannelCloseEvent3.3 ConsumerManager#doChannelCloseEvent3.3.1 DefaultConsumerIdsC…