色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Go語言可變參數怎么用能最大化它的效用

馬哥Linux運維 ? 來源:博客園 ? 作者:apocelipes ? 2021-09-30 16:33 ? 次閱讀

Go 語言可變參數怎么用能最大化它的效用?本文對可變參數進行了詳細介紹。

在實際開發中,總有一些函數的參數個數是在編碼過程中無法確定的,比如我們最常用的 fmt.Printf 和 fmt.Println:

fmt.Printf(“一共有%v 行%v 列、n”, rows, cols)

fmt.Println(“共計大小:”, size)

當你需要實現類似的接口時,就需要我們的可變參數出場了。

golang 的可變參數

可變參數就是一個占位符,你可以將 1 個或者多個參數賦值給這個占位符,這樣不管實際參數的數量是多少,都能交給可變參數來處理,我們看一下可變參數的聲明:

func Printf(format string, a ...interface{}) (n int, err error)func Println(a ...interface{}) (n int, err error)

可變參數使用 name ...Type 的形式聲明在函數的參數列表中,而且需要是參數列表的最后一個參數,這點與其他語言類似;

可變參數在函數中將轉換為對應的 []Type 類型,所以我們可以像使用 slice 時一樣來獲取傳給函數的參數們;

有一點值得注意,golang 的可變參數不需要強制綁定參數的出現。

舉個例子,我想在 c 語言中實現一個求和任意個整數的函數 sum:

int sum(int num, ...) {

// todo

}

我們只有先指定至少一個固定的形參(num)才能使用...可變參數,在 golang 中是不需要這樣做的:

func sum(nums ...int) int {

//todo

}

這也是 golang 語法簡潔的其中一個體現。

傳遞參數給...可變參數

傳遞參數給帶有可變參數的函數有兩種形式,第一種與通常的參數傳遞沒有什么區別,拿上一節的 sum 舉個例子:

sum(1, 2, 3)

sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

除了參數的個數是動態變化的之外和普通的函數調用是一致的。

第二種形式是使用...運算符以變量...的形式進行參數傳遞,這里的變量必須是與可變參數類型相同的 slice,而不能是其他類型(沒錯,數組也不可以),看個例子:

numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

sum(numbers.。.) // 和 sum(1, 2, 3, 4, 5, 6, 7, 8, 9. 10) 等價

這種形式最常用的地方是在內置函數 append 里:

result := []int{1, 3}

data := []int{5, 7, 9}

result = append(result, data.。.) // result == []int{1, 3, 5, 7, 9}

是不是和 python 的解包操作很像,沒錯,大部分情況下你可以把...運算符當做是 golang 的 unpack 操作,不過有幾點不同還是要注意的:

第一,只能對 slice 類型使用...運算符:

arr := [...]int{1, 2, 3, 4, 5}

sum(arr.。.) // 編譯無法通過

你會見到這樣的報錯信息cannot use arr (type [5]int) as type []int in argument to sum

這是因為可變參數實際是個 slice,... 運算符是個語法糖,它把前面的 slice 直接復制給可變參數,而不是先解包成獨立的 n 個參數再傳遞,這也是為什么我只說...運算符看起來像 unpack 的原因。

第二個需要注意的地方是不能把獨立傳參和 ... 運算符混用,再看個例子:

slice := []int{2, 3, 4, 5}

sum(1, slice.。.) // 無法通過編譯

這次你會見到一個比較長的報錯:

too many arguments in call to sum

have (number, []int.。.)

want (...int)

這是和前面所說的原因是一樣的,... 運算符將不定參數直接替換成了 slice,這樣就導致前一個獨立給出的參數不再算入可變參數的范圍內,使得函數的參數列表從 (...int) 變成了 (int, ...int),最終使得函數類型不匹配編譯失敗。

正確的做法也很簡單,不要混合使用...運算符給可變參數傳參即可。

讀了這篇文章,再加上一些簡單的聯系,我相信你們一定也能掌握 golang 可變參數的使用。

參考:

https://golang.org/ref/spec#Passing_arguments_to_.。._parameters

https://golang.org/doc/effective_go.html#append

轉自:

cnblogs.com/apocelipes/p/9861315.html

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 參數
    +關注

    關注

    11

    文章

    1838

    瀏覽量

    32261
  • 編碼
    +關注

    關注

    6

    文章

    945

    瀏覽量

    54850

原文標題:Go 可變參數 ... parameters 讀這篇就夠了

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    光伏發電如何實現最大化

    光伏發電實現最大化是一個綜合性的問題,需要從多個方面入手。以下是一些關鍵措施: 一、選用優質設備 太陽板 :選用具有高光電轉化效率和穩定性的太陽板是基礎。例如,單晶硅太陽
    的頭像 發表于 12-05 11:06 ?284次閱讀

    在學習go語言的過程踩過的坑

    作為一個5年的phper,這兩年公司和個人都在順應技術趨勢,新項目慢慢從php轉向了go語言,從2021年到現在,筆者手上也先后開發了兩個go項目。在學習go
    的頭像 發表于 11-11 09:22 ?167次閱讀

    go語言如何解決并發問題

    作為一個后端開發,日常工作中接觸最多的兩門語言就是PHP和GO了。無可否認,PHP確實是最好的語言(手動狗頭哈哈),寫起來真的很舒爽,沒有任何心智負擔,字符串和整型壓根就不用區分,開發速度真的是比
    的頭像 發表于 10-23 13:38 ?143次閱讀
    <b class='flag-5'>go</b><b class='flag-5'>語言</b>如何解決并發問題

    KM振動分析與動平衡服務實現工廠設備效率最大化

    振動儀
    KM預測性維護專家
    發布于 :2024年10月16日 15:57:14

    擴展塢使用技巧:如何最大化你的筆記本電腦接口能力

    最大化您的筆記本電腦接口能力,以下是一些實用的擴展塢使用技巧: 了解您的需求:在購買擴展塢之前,明確您需要哪些類型的端口(如HDMI, USB-C, RJ45等)以及是否需要充電功能,以選擇最適合
    的頭像 發表于 10-08 10:52 ?496次閱讀

    如何更好地發揮工業冷水機的最大效用

    在工業制造領域中,工業冷水機作為關鍵的溫度控制設備,對于確保工業生產線的穩定運行、提高產品質量及延長生產設備的壽命起著至關重要的作用。更好地發揮工業冷水機的最大效用,幫助企業和工廠更好地使用工
    的頭像 發表于 09-12 14:52 ?205次閱讀
    如何更好地發揮工業冷水機的<b class='flag-5'>最大</b><b class='flag-5'>效用</b>

    液冷充電槍線最大化提高充電效率

    法法易提供的液冷充電槍線可以最大化的提升充電效率,讓大家的充電時間進一步縮短。? 液冷充電槍線使用液體循環來冷卻電纜,以避免因高溫而導致電纜損壞或充電速度減緩。而且液冷充電槍線采用銅芯導線和耐高溫、耐磨損、
    的頭像 發表于 09-11 14:25 ?404次閱讀

    智慧城市管理系統:引領未來城市發展的創新力量

    智慧城市管理系統是現代城市發展的關鍵,通過整合資源、優化決策和提升效率,實現了城市資源的最大化利用和效益最大化通過大數據分析和智能算法,深度挖掘城市運行中的各種數據,精準預測和解
    的頭像 發表于 08-21 11:35 ?307次閱讀
    智慧城市管理系統:引領未來城市發展的創新力量

    三十分鐘入門基礎Go Java小子版

    前言 Go語言定義 Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態、強類型、編譯型語言
    的頭像 發表于 08-12 14:32 ?745次閱讀
    三十分鐘入門基礎<b class='flag-5'>Go</b> Java小子版

    請問STVP+COSMIC環境下的go to definition怎么

    STVP+COSMIC環境下的go to definition怎么? 我現在go to definition在一個宏定義的時候有效果,但是函數什么的沒用,是怎么回事呢,是不是工程里面沒有設置好,求大家幫幫忙?
    發表于 05-11 06:11

    Go語言中的函數、方法與接口詳解

    Go 沒有類,不過可以為結構體類型定義方法。方法就是一類帶特殊的接收者參數的函數。方法接收者在它自己的參數列表內,位于 func 關鍵字和方法名之間。(非結構體類型也可以定義方法)
    的頭像 發表于 04-23 16:21 ?850次閱讀

    fpga的是什么編程語言 fpga什么語言開發

    和VHDL都是用于邏輯設計的硬件描述語言,并且都已成為IEEE標準。它們形式化地抽象表示電路的結構和行為,支持邏輯設計中層次與領域的描述,具有電路仿真與驗證機制以保證設計的正確性,并便于文檔管理和設計重用。 fpga什么
    的頭像 發表于 03-14 17:09 ?3536次閱讀

    C語言中的可變參數介紹

    C 語言為這種情況提供了一個解決方案,允許您定義一個函數,根據具體的需求接受可變數量的參數
    發表于 02-28 14:00 ?322次閱讀
    C<b class='flag-5'>語言</b>中的<b class='flag-5'>可變</b><b class='flag-5'>參數</b>介紹

    GPT寫個mexFunction

    最近有位用戶想在 MATLAB 里 m 代碼實現一個將某個圖形窗口最大化顯示的功能,問我們有沒有 MATLAB 函數支持這個。
    的頭像 發表于 01-25 10:10 ?721次閱讀
    <b class='flag-5'>用</b>GPT寫個mexFunction

    用于并行采樣的EVADC同步轉換,如何在最大化采樣率的同時最大限度地減少抖動?

    在我的應用程序中,HSPDM 觸發 EVADC 同時對兩個通道進行采樣。 我應該如何配置 EVADC 以最大限度地減少采樣抖動并最大限度地提高采樣率? 在用戶手冊中,提到 SSE=0,USC=0
    發表于 01-18 07:59
    主站蜘蛛池模板: 红尘影院手机在线观看| 精品无码一区二区三区不卡| 久久久性色精品国产免费观看| 新影音先锋男人色资源网| 国产精品高清视亚洲一区二区| 特大黑人娇小亚洲女mp4| 国产精品一区二区AV97| 亚洲精品无码国产爽快A片百度 | 果冻传媒APP免费网站在线观看| 亚洲成人免费看| 久久精品视频在线看15| 97免费在线视频| 欧美最猛黑人AAAAA片| 中文字幕在线观看网址| 欧美14videosex性欧美成人| 被室友C哭调教双性| 午夜国产福利| 久青草国产在线观看视频 | 暗卫受被肉到失禁各种PLAY| 兽交白浆喷水高潮| 久久vs国产| japanesematur乱儿| 亚洲国产欧美在线人成aaaa20| 免费人成在线观看网站视频| 国产露脸无码A区久久蘑菇| 999视频精品全部免费观看| 无羞耻肉动漫在线观看| 麻婆豆腐传媒视频免费| 国产精品亚洲欧美一区麻豆| 91女神娇喘| 亚洲日本va中文字幕久久| 青草国产超碰人人添人人碱| 精品欧美一区二区三区久久久| 芭乐视频免费资源在线观看| 亚洲精品一区国产欧美| 人性本色联盟| 久久三级视频| 国产精品无码无卡毛片不卡视| 在线成 人av影院| 午夜免费福利片| 日本黄色网站在线观看|