Go中接口切片类型转换:为什么这不起作用?
大家好!我是Go新手,一直搞不懂接口切片的类型转换。我有一个函数接受 `[]interface{}`,但我想传递一个具体类型的切片,比如 `[]string`。为什么Go不允许直接这样做?
以下是我无法正常工作的示例代码:
```go
package main
import "fmt"
func printAll(items []interface{}) {
for _, item := range items {
fmt.Println(item)
}
}
func main() {
names := []string{"Alice", "Bob", "Charlie"}
// 错误:cannot use names (type []string) as type []interface{} in argument to printAll
printAll(names)
}
```
我知道 `string` 实现了 `interface{}` 接口,但为什么 `[]string` 不能用作 `[]interface{}`?文档中提到了协变性,但我不太理解如何在实际中应用。我需要将不同类型的切片传递给同一个函数。如何正确解决这个问题?也许需要使用...