我尝试:转换阵列接口{}切片,但结果不能使用LEN()和其他方法
var a [100]int
func fun1(src interface{}) interface{} {
src, _ = src.([100]int) // changed []int to [100]int
fmt.Println(reflect.TypeOf(src)) // result: []int
dest := make([]int, len(src))
return dest
}
有一个错误:
message: 'invalid argument src (type interface {}) for len'
但是,如果我重新定义一个变量:
var a [100]int
func fun1(src interface{}) interface{} {
slice_src, _ := src.([100]int) //changed []int to [100]int
fmt.Println(reflect.TypeOf(slice_src)) // result: []int
dest := make([]int, len(slice_src))
return dest
}
它会没事的。
为什么reflect.TypeOf(src)
会在我使用src.([]int)
后打印[] int,但错误显示src仍然是接口{}? 我检查了这个convert interface{} to int,但我仍然不明白如何使用正确的转换。
还有另外一个问题:
我改变了[]int
到[100]int
因为类型声明之前将返回[]
和false
。
但是,如果我不知道的a
类型,我该如何使用类型断言来传递一个数组(如[99]int
)作为interface{}
工作并返回片([]int
)?
第一个示例中的断言类型是红色鲱鱼。您可以在不更改语义的情况下将其删除。一个变量不能改变它的静态类型。 – Peter