首頁 > 後端開發 > Golang > 如何正確地將常規切片參數和分解切片參數傳遞給 Go 中的可變參數函數?

如何正確地將常規切片參數和分解切片參數傳遞給 Go 中的可變參數函數?

Mary-Kate Olsen
發布: 2024-12-11 16:24:14
原創
338 人瀏覽過

How Can I Correctly Pass Both Regular and Exploded Slice Arguments to a Variadic Function in Go?

可變參數函數參數:在Go 中混合「分解」切片和常規參數

Go 程式語言提供了使用可變參數定義函數的能力參數使用“...”語法。這允許函數接受可變數量的參數。然而,理解可變參數的機制對於避免運行時錯誤至關重要。

在給定的範例中:

func main() {
    stuff := []string{"baz", "bla"}
    foo("bar", stuff...)
}

func foo(s ...string) {
    fmt.Println(s)
}
登入後複製

目的是傳遞常規參數(「bar」)和foo 函數的「爆炸」切片(東西...)。然而,由於“參數太多”,這會導致編譯錯誤。

這種行為的原因在於可變參數的定義。在 Go 中,有兩種​​不同的方法來指定可變參數的參數:

  1. 枚舉元素: 切片的每個元素單獨傳遞,用逗號分隔。
  2. 使用現有切片:整個切片,後跟...,作為單一傳遞argument.

不允許在同一個可變參數中混合使用這兩種方法。當 stuff... 被傳遞時,切片本身就成為可變參數的值。因此,它不能與任何枚舉元素(如“bar”)共存。

如果預期行為是「爆炸」切片,以下語法是正確的:

foo([]string{"bar"}...)
登入後複製

這將有效擴展為:

foo("bar", "baz", "bla")
登入後複製

總之,在可變參數函數的上下文中將枚舉參數與切片混合是不可能的去。語言規格要求可變參數只能接受單一切片參數,該參數將成為該參數的值。為了實現所需的「爆炸」行為,整個切片必須單獨傳遞,而不需要任何前面的枚舉參數。

以上是如何正確地將常規切片參數和分解切片參數傳遞給 Go 中的可變參數函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板