3 回答

TA貢獻1860條經(jīng)驗 獲得超8個贊
解包可變參數(shù)
對于你的例子,
package main
import "fmt"
func run(a, b string, list ...int) {
fmt.Println(list)
for i, e := range list {
fmt.Println(i, e)
}
}
func call(list ...int) {
fmt.Println(list)
var x, y string
run(x, y, list...) // use "list..." is allowed
}
func main() {
a := []int{1, 2, 3}
fmt.Println(a)
call(a...)
}
游樂場: https: //play.golang.org/p/NI0L-nVVUxm
輸出:
[1 2 3]
[1 2 3]
[1 2 3]
0 1
1 2
2 3

TA貢獻1936條經(jīng)驗 獲得超7個贊
只有當您傳遞給可變參數(shù)函數(shù)的切片代替可變參數(shù)時,可變參數(shù)才能被擴展。出于這個原因,您不能在單個可變參數(shù)中組合單個參數(shù)和擴展切片。當您使用擴展時,該函數(shù)接收“擴展”切片本身作為其可變參數(shù) - 它是語義糖,可能會令人困惑,因為這些調(diào)用不等效:
foo := []string{"alpha","beta"}
bar(foo...) // bar receives the foo slice as its variadic parameter
bar(foo[0], foo[1]) // bar receives a new slice with these elements copied to it
您可以在規(guī)范中找到更多詳細信息,盡管他們使用的示例使一些解釋不清楚,因為他們的示例可變參數(shù)函數(shù)具有多個參數(shù)。以“如果最終參數(shù)是可賦值的”開頭的部分指的是“最終參數(shù)”,而不是一般的“可變參數(shù)函數(shù)的最終參數(shù)”意義上的,而是特定的“示例中函數(shù)的最終參數(shù)”意義上的。

TA貢獻1805條經(jīng)驗 獲得超10個贊
你沒有聲明變量 x 和 y。創(chuàng)建它們或僅使用引號。 https://play.golang.org/p/gZnMALrM4Uh
package main
import (
"fmt"
)
func run(a, b string, list ...int) {
fmt.Println(list)
}
func call(list ...int) {
run("x", "y", list...) // ok
}
func main() {
a := []int{1, 2, 3}
call(a...)
}
- 3 回答
- 0 關注
- 254 瀏覽
添加回答
舉報