package main
import "fmt"
func main(){
a := []int{1,2,3}
fmt.Println(a...)
}
è¿è¡Œæ¤å‘½ä»¤ä¼šå‡ºçŽ°ä»¥ä¸‹é”™è¯¯
./program.go:5: cannot use a (type []int) as type []interface {} in argument to fmt.Println
æ¥è‡ªgodoc fmt Println
func Println(a ...interface{}) (n int, err error)
Println
接å—ä»»ä½•å€¼ï¼Œå› ä¸ºå®ƒæ˜¯ä¸€ä¸ªç©ºæŽ¥å£ã€‚
令我困惑的是
fmt.Println(a...)
与fmt.Println(a[0],a[1],a[2])
但是一个有效,而å¦ä¸€ä¸ªæ— 效。
我在这里想念什么?
ç”案 0 :(得分:2)
[]int
与[]interface{}
ä¸åŒï¼Œå› æ¤ï¼Œå¦‚果您有[]int
,则ä¸èƒ½å°†å…¶ä½œä¸ºå¯å˜å‚æ•°åˆ‡ç‰‡çš„å€¼ä¼ é€’ç»™fmt.Println()
。您å¯ä»¥åŽŸæ ·ä¼ 递它,但这将是一个[]interface{}
切片,而å•ä¸ªå€¼ä¸º[]int
切片。
fmt.Println(a...)
与fmt.Println(a[0],a[1],a[2])
ä¸åŒã€‚
fmt.Println(a[0], a[1], a[2])
ç‰åŒäºŽ
fmt.Println([]interface{}{a[0], a[1], a[2]}...)
ç‰æ•ˆäºŽ
fmt.Println([]interface{}{
interface{}(a[0]),
interface{}(a[1]),
interface{}(a[2]),
}...)
å› æ¤ï¼Œå½“æ‚¨ä¼ é€’a[0]
,a[1]
å’Œa[2]
时,将创建éšå¼interface{}
值,这些值将éšå¼åŒ…装在切片ä¸ã€‚
如果您想将a
çš„å…ƒç´ ä¼ é€’ç»™æœŸæœ›[]interface{}
å¯å˜å‚数的函数,则必须“手动â€é¢„先创建该切片,例如:
b := make([]interface{}, len(a))
for i, v := range a {
b[i] = v
}
fmt.Println(b...)
在Go Playground上å°è¯•è¿™äº›ç¤ºä¾‹ã€‚
å¦è¯·å‚阅相关问题:Unpacking slice of slices