2 回答
TA贡献2041条经验 获得超4个赞
不能。接口就是接口。
interface{} 不是某种“任何”类型。但是,任何类型都实现了 interface{}。接口只是一组应该实现的方法。
如果要检查 interface{} 是否是切片,可以这样写:
import "reflect"
t := reflect.TypeOf(list)
if t.Kind() == reflect.Slice {
...
}
我建议您阅读这篇非常有用的文章:http : //blog.golang.org/laws-of-reflection。
此外,阅读 sort 包的代码会很好:https : //golang.org/pkg/sort/。这是一个 golang-way 实现排序的例子。
编辑:如果你真的想使用 []interface{} 作为参数,实际上你可以这样做:
vs := make([]interface{}, len(list))
for i, e := range list {
vs[i] = e
}
Do(vs, f)
事实上,[]interface{} 并不是一个空接口。它是一个切片类型,其元素为 interface{}; []int 不是 []interface{},只是实现了 interface{}。
我猜您想编写某种通用的排序方法,就像您在 Java 中使用泛型编写它一样。我认为这是一个糟糕的代码。
TA贡献1780条经验 获得超3个赞
错误告诉您,您正在尝试将一个 int 数组(slice
变量)传递给 function Do
,该函数期望它的第一个参数为 type SortList
。
此外,您的接口定义看起来不正确。你有数组语法。它应该是这样的:
type SortList interface{}
我建议您查看有关接口的gobyexample页面。
- 2 回答
- 0 关注
- 260 浏览
添加回答
举报