可變參數函數參數:在Go 中混合「分解」切片和常規參數
Go 程式語言提供了使用可變參數定義函數的能力參數使用“...”語法。這允許函數接受可變數量的參數。然而,理解可變參數的機制對於避免運行時錯誤至關重要。
在給定的範例中:
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) } func foo(s ...string) { fmt.Println(s) }
目的是傳遞常規參數(「bar」)和foo 函數的「爆炸」切片(東西...)。然而,由於“參數太多”,這會導致編譯錯誤。
這種行為的原因在於可變參數的定義。在 Go 中,有兩種不同的方法來指定可變參數的參數:
不允許在同一個可變參數中混合使用這兩種方法。當 stuff... 被傳遞時,切片本身就成為可變參數的值。因此,它不能與任何枚舉元素(如“bar”)共存。
如果預期行為是「爆炸」切片,以下語法是正確的:
foo([]string{"bar"}...)
這將有效擴展為:
foo("bar", "baz", "bla")
總之,在可變參數函數的上下文中將枚舉參數與切片混合是不可能的去。語言規格要求可變參數只能接受單一切片參數,該參數將成為該參數的值。為了實現所需的「爆炸」行為,整個切片必須單獨傳遞,而不需要任何前面的枚舉參數。
以上是如何正確地將常規切片參數和分解切片參數傳遞給 Go 中的可變參數函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!