猿问

golang []interface{} 不能是函数参数吗?

我的代码:


package sort_test


type SortList []interface{}


type SortFunc func(interface{}, interface{}) bool



func Do(list SortList, function SortFunc)

主包


package main


import (

        "sort_test"

)


func main() {


    list := []int{3, 4, 5, 6, 6, 77, 4, 4, 5, 6, 8, 345, 45, 424, 2, 67, 7, 830}


slice := list[:]


sort_test.Do(slice, function)

}

编译错误

src/algorithm/algorithm.go:32: cannot use slice (type []int) as type sort_test.SortList in argument to sort_test.Do

src/algorithm/algorithm.go:32: cannot use function (type func(int, int) bool) as type sort_test.SortFunc in argument to sort_test.Do

make: *** [algorithm] Error 2


犯罪嫌疑人X
浏览 261回答 2
2回答

缥缈止盈

不能。接口就是接口。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 中使用泛型编写它一样。我认为这是一个糟糕的代码。

Helenr

错误告诉您,您正在尝试将一个 int 数组(slice变量)传递给 function Do,该函数期望它的第一个参数为 type SortList。此外,您的接口定义看起来不正确。你有数组语法。它应该是这样的:type SortList interface{}我建议您查看有关接口的gobyexample页面。
随时随地看视频慕课网APP

相关分类

Go
我要回答