Go語言:變參函數

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

變參函數:

函數中形式參數的數目通常是確定的,在調用的時候要依次傳入與形式參數對應的所有實際參數,但是在某些函數的參數個數可以根據實際需要來確定,這就是變參函數。

Go語言支援不定長變參,但是要注意不定長參數只能作為函數的最後一個參數,不能放在其他參數的前面。函數的聲明如下:

Func functionName(variableArgumentName ... dateType) 傳回值{

Body

}

不定長變參的實質就是一個切片,可以使用range遍曆,例如:

Func f(args ...int){

For _,arg :=range args{

fmt.Println(arg)

}

}

 

我們熟知的fmt.Print()函數可以傳遞不同類型的參數,go語言規定,如果希望傳遞任意類型的變參,變參類型應該制定為空白介面類型:interface{}.例如:

Func f(args ... Interface{}){

...

}

 

Go語言中,空介面可以指向任何資料對象,所以可以使用interface{}定義任意類型變數,同時interface{}也是型別安全的。

例:

package main

import (

"fmt"

)

func main() {

f(2, "Go", 8, "language", 'a', false, 'A', 3.14)

}

func f(args ...interface{}) {

var num = make([]int, 0, 6)

var str = make([]string, 0, 6)

var ch = make([]int32, 0, 6)

var other = make([]interface{}, 0, 6)

 

for _, arg := range args {

switch v := arg.(type) {

case int:

num = append(num, v)

case string:

str = append(str, v)

case int32:

ch = append(ch, v)

default:

other = append(other, v)

}

}

fmt.Println(num)

fmt.Println(str)

fmt.Println(ch)

fmt.Println(other)

}

輸出:

[2 8]

[Go language]

[97 65]

[false 3.14]

    變參函數難度不大,多理解理解,跟著寫寫,然後自己嘗試些幾個變參函數就可以了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.