go-可變參數

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

今天在嘗試用go寫一個簡單的orm的時候 發現 在調用可變參數函數時,不是總能使用省略符號將一個切片展開,有時候編譯器可能會報錯 再此用幾個簡單的例子作為說明

當不太確定資料類型的時候我們通常採用空介面

tests1(789)fmt.Println("-------------")tests1("789")
func tests1(arg interface{}) {    fmt.Println("value:", arg)    fmt.Println("type:", reflect.TypeOf(arg).Name())}

輸出結果

value: 789type: int-------------value: 789type: string

在使用相同類型的可變入參時

tests([]string{"4", "5", "6"}...)
func tests(args ...string) {    for i, v := range args {        fmt.Println(i, "----", v)    }}

輸出結果

0 ---- 41 ---- 52 ---- 6

當使用interface{}作為可變入參時

func testParams(args ...interface{}) {    for i, v := range args {        if s, ok := v.(string); ok {            fmt.Println("----", s)        }        if s, ok := v.([]string); ok {            for i, v := range s {                fmt.Println(i, "[]----", v)            }        }        fmt.Println(i, v)    }}

出現錯誤

cannot use []string literal (type []string) as type []interface {} in argument to testParams      

當看到這裡時候答案已經露出水面了
這裡提供兩種解決方案

第一種方法

s := []string{"4", "5", "6"}var d []interface{} = []interface{}{s[0], s[1], s[2]}testParams(d...)

結果

---- 40 4---- 51 5---- 62 6

第二種方法

s := []string{"4", "5", "6"}var d []interface{}d = append(d, s)testParams(d...)

結果

0 []---- 41 []---- 52 []---- 60 [4 5 6]

總結: 在使用interface{}作為可變入參時 傳入的參數要做類型轉換

聯繫我們

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