gpt4 book ai didi

go - array转interface{}转slice,结果不能用len()等方法

转载 作者:数据小太阳 更新时间:2023-10-29 03:39:55 24 4
gpt4 key购买 nike

我试过了:

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 仍然是 interface{} ?我检查了这个convert interface{} to int , 但我仍然不明白如何使用正确的转换。

还有一个问题:

我将 []int 更改为 [100]int 因为之前的类型断言将返回 []false

但是如果我不知道 a 的类型,我如何使用类型断言将数组(如[99]int)作为 >interface{} 运行并返回 slice ([]int)?

最佳答案

当您第一次在 fun1(src interface{}) 中声明 src 时,您正在创建一个接口(interface)类型的变量。其中,当然不能调用 len

原因reflect.TypeOf说 []int 是由于 TypeOf 的工作原理。它采用接口(interface){}并告诉您接口(interface)中的事物类型{}

所以,在第一个例子中,你已经有了一个接口(interface)在第二个示例中,go 自动创建了一个 interface{} 实例来保存您的 []int slice 。

关于go - array转interface{}转slice,结果不能用len()等方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46990943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com