【发布时间】:2018-02-15 07:16:57
【问题描述】:
我有一个函数,我想向它提供不同类型的切片,然后我想循环它们并打印它们的内容。以下代码有效:
func plot(data interface{}){
fmt.Println(data)
//fmt.Println(len(data))
}
func main() {
l := []int{1, 4, 3}
plot(l)
}
但是当我取消注释打印切片长度的行时,我收到一条错误消息invalid argument data (type interface {}) for len。
知道如何获取切片的长度以便循环遍历它吗?
【问题讨论】:
-
@CeriseLimón 根据问题“我想喂不同种类的切片”。
-
如果参数是一个空接口,你必须使用
reflect包来做你想做的事。见golang.org/pkg/reflect。您可能需要考虑定义一个特定的接口,该接口定义了执行您需要对传入的对象执行的任何操作的方法。 -
如果您正在使用不同类型的切片,您必须已经在使用反射或将它们断言到具体类型。你怎么使用
data却无法获得长度? -
在
func plot (data interface{}, length int)中传递长度不是更容易吗?在传递之前假设它不是interface{}类型。