- Go并發(fā)編程實(shí)戰(zhàn)
- 汪明
- 621字
- 2022-07-29 15:05:33
3.5 變長函數(shù)
前面介紹過的求和sum函數(shù)只能處理定義時(shí)的2個(gè)參數(shù),但是如果要對3個(gè)或者更多的參數(shù)求和,則無能為力。考慮到Go語言不支持函數(shù)重載,因此也不能同時(shí)定義兩個(gè)同名的sum函數(shù)來解決這個(gè)問題。那么在Go語言中,如何才能達(dá)到sum函數(shù)既可以接收2個(gè)參數(shù)又可以接收3個(gè)參數(shù)呢?
在Go語言中,有一種特殊的函數(shù)參數(shù),叫作變長參數(shù),可以處理任意多個(gè)參數(shù)。借助變長參數(shù),可以讓函數(shù)的功能更加強(qiáng)大。這個(gè)特性和TypeScript語言中的不定參數(shù)非常類似。變長參數(shù)在定義時(shí)需要在數(shù)據(jù)類型前面用3個(gè)點(diǎn)“...”來指定,如變長的整數(shù)類型參數(shù)為...int。有變長參數(shù)的函數(shù)也稱為變長函數(shù)。下面是變長函數(shù)的示例程序3-7。
示例程序3-7 變長函數(shù)的用法:chapter03\code07\func.go

在示例程序3-7中,第04行定義了一個(gè)名為sum的函數(shù)。這里需要特別注意一下,sum函數(shù)的參數(shù)ns是...int 。整數(shù)類型(int)前面有3個(gè)點(diǎn),表示參數(shù)ns是變長參數(shù),換句話說,該函數(shù)可以接收任意數(shù)量的整數(shù)類型。
第05行定義了一個(gè)變量ret并將它賦值為0,于是Go編譯器把變量ret認(rèn)定為整數(shù)類型。第06行用到了for循環(huán)語句,后續(xù)章節(jié)會詳細(xì)介紹這個(gè)循環(huán)語句,這里只需要了解一下即可。第06~08行實(shí)際上就是對傳入的參數(shù)值進(jìn)行累加。第09行將累加值返回。第12~15行在調(diào)用sum函數(shù)時(shí)分別傳入0個(gè)參數(shù)、1個(gè)參數(shù)、2個(gè)參數(shù)或者3個(gè)參數(shù),都可以正常執(zhí)行。
變長函數(shù)在處理不確定數(shù)目的參數(shù)時(shí)是非常有用的。換句話說,如果一個(gè)函數(shù)需要處理不定數(shù)目的參數(shù),就可以使用變長函數(shù)。
注意
在Go語言中,變長參數(shù)...必須放于函數(shù)的末尾,否則會報(bào)語法錯(cuò)誤。
- SPSS數(shù)據(jù)挖掘與案例分析應(yīng)用實(shí)踐
- 摩登創(chuàng)客:與智能手機(jī)和平板電腦共舞
- Python 深度學(xué)習(xí)
- arc42 by Example
- C語言程序設(shè)計(jì)基礎(chǔ)與實(shí)驗(yàn)指導(dǎo)
- Koa開發(fā):入門、進(jìn)階與實(shí)戰(zhàn)
- Hands-On JavaScript High Performance
- Python數(shù)據(jù)可視化之Matplotlib與Pyecharts實(shí)戰(zhàn)
- 單片機(jī)應(yīng)用與調(diào)試項(xiàng)目教程(C語言版)
- PHP 7+MySQL 8動態(tài)網(wǎng)站開發(fā)從入門到精通(視頻教學(xué)版)
- Angular開發(fā)入門與實(shí)戰(zhàn)
- Python 3 數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)
- Java Web應(yīng)用開發(fā)項(xiàng)目教程
- OpenCV Android Programming By Example
- Modernizing Legacy Applications in PHP