登录
首页 >  Golang >  Go问答

将一个接口强制转换为另一个接口

来源:stackoverflow

时间:2024-03-23 18:57:31 485浏览 收藏

将一个接口强制转换为另一个接口时,Go 语言中可能出现类型不匹配的错误。为了解决这个问题,可以使用反射 API 来动态检查接口的类型,并根据不同的类型进行相应的处理。例如,如果接口表示一个切片,可以使用 `reflect.ValueOf()` 和 `reflect.Index()` 方法来遍历切片中的元素,并将其转换为所需的接口类型。通过使用反射,可以实现通用的解决方案,以处理任何类型的接口,并执行所需的转换或操作。

问题内容

如何将 interface{} 转换为 []interface{}?

rt := reflect.ValueOf(raw)
switch rt.Kind() {
case reflect.Slice:
    src := raw.([]interface{}) //this operation errors out
    for _,_ :=  range src {
        //some operation
    }  
}

我收到错误 panic: 接口转换: 接口 {} 是 []string, not []interface {} 我想让这个方法足够通用以处理任何类型,而不是固定类型。

我对 go 很陌生,我遇到了这个问题,很可能我做错了。有什么建议可以解决这个问题吗?

编辑: 一些操作是json.marshal,它返回字节数组。

我真正想做的事情: 我有一个接收接口类型的函数,如果它是数组/切片,那么我想在每个项目上运行 json.marshal 而不是将其作为一个整体应用。基本上,如果第一级对象是一个数组,我会尝试分解 json blob,是的,它需要是通用的。


解决方案


如错误消息所述,[]string 不是 []interface{}。请参阅 FAQ 了解说明。

一般使用反射 api 来实现此目的:

v := reflect.ValueOf(raw)
switch v.Kind() {
case reflect.Slice:
    for i := 0; i < v.Len(); i++ {
        elem := v.Index(i).Interface()
        // elem is an element of the slice
    }
}

Run it on the Playground

以上就是《将一个接口强制转换为另一个接口》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>