當我編譯以下程序時func myPrint(v ...interface{}) { fmt.Println("Hello", v...)}func main() { myPrint("new", "world")}我收到編譯錯誤too many arguments in call to fmt.Println我認為 v... 將擴展為第二個、第三個參數,而 fmt.Println 將看到三項可變參數列表。我認為這相當于fmt.Println("Hello", "new", "world")為什么會報錯。
2 回答

富國滬深
TA貢獻1790條經驗 獲得超9個贊
嘗試這個。它將 Hello 附加到可變參數參數,然后使用println.
package main
import "fmt"
func myPrint(v ...interface{}) {
a := append([]interface{}{"Hello"}, v...) // prepend "Hello" to variadics
fmt.Println(a...) // println the whole lot
}
func main() {
myPrint("new", "world")
}

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
您在調用fmt.Println(). 您實際發送的是 2 個參數:一個字符串,然后是interface{}擴展類型的切片。函數調用不會將其連接成單個切片。
此設計將編譯并運行您期望的結果:
func myPrint(v ...interface{}) {
fmt.Print("Hello ")
fmt.Println(v...)
}
func main() {
myPrint("new", "world")
}
- 2 回答
- 0 關注
- 282 瀏覽
添加回答
舉報
0/150
提交
取消