Golang的不定參數

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

在很多語言中都提供了不定參數和函數重載以及函數式語言中得閉包來提高函數的靈活性。如果使用過fmt包裡的函數,那麼你就已經接觸到了Golang的不定參數了。那麼如何定義一個自己的不定參數的函數呢?

一、函數定義

首先來看如何定義一個不定參數的函數:

func聽YourFun(v...聽interface{}){}

該函數定義,定義了一個接受任何數目任何型別參數的函數。這裡特殊的文法是三個點“...”,在一個變數後面加上三個點後,表示從該處開始接受不定參數,不同於python,golang的不定參數如果將這裡"interface{}" 替換成某一確定類型,那麼其就只能接受該類型的不定參數。

二、三個點

上面我們看到有三個點"..."的特殊標記。那麼這三個點"..."有啥作用呢?

2.1 不定參數

如上所述,在定義不定參數時,表示從該參數開始記錄不定參數

2.2 解引用slice

當要傳遞若干個值到不定參數函數中得時候,可以手動書寫每個參數,也可以將一個slice傳遞給該函數:

聽聽聽聽YourFunc聽(YourSlice...)

通過"..."可以將slice中得參數對應的傳遞給函數。相當於python中得“*args”

這裡要注意的是,解引用slice目前只能在不定參數函數傳遞參數時使用,在其他地方使用會報錯。

三、遍曆參數

下面我們來看一個執行個體:

func聽P聽(v...聽string)聽{for聽_,item聽:=聽range聽v聽{聽聽聽聽fmt.Println("item:",item)聽聽聽聽}}func聽main()聽{聽聽聽聽var聽l聽[]string聽聽聽聽l聽=聽append(l,"a")聽聽聽聽l聽=聽append(l,"b")聽聽聽聽fmt.Println("l聽is聽",l)聽聽聽聽P(l...)}

這裡我們看到的結果是,首先一個完整的list,然後是每個元素:

l聽is聽聽[a聽b]item:聽aitem:聽b

通過配合使用for...range可以遍曆不定參數v中得每個參數。這裡我們將不定參數類型設為string,因此只能接受若干的string 類型的參數。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.