登录
首页 >  Golang >  Go问答

Golang中如何返回未知类型的数组?

来源:stackoverflow

时间:2024-04-16 22:30:33 211浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《Golang中如何返回未知类型的数组?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

所以我有一个需要返回数组的方法,但我不知道要返回什么类型的数组。 要返回的这种类型的数组取决于方法逻辑。

我的方法看起来像这样...

func (c Case) GetFrdValues(frdFieldKey string) (interface{}, error) {
    for _, singleFrd := range c.CaseDetails.GetCase().GetFrds() {
        if singleFrd.GetIdentifier().GetFieldKey() == frdFieldKey {
            switch singleFrd.GetValue().WhichType() {
            case casespb.Value_StringValue_case:
                return []string{singleFrd.GetValue().GetStringValue()}, nil
            case casespb.Value_NumberValue_case:
                return [1]float64{singleFrd.GetValue().GetNumberValue()}, nil
            case casespb.Value_BoolValue_case:
                return [1]bool{singleFrd.GetValue().GetBoolValue()}, nil
            case casespb.Value_NullValue_case:
                return []string{}, nil
            case casespb.Value_ListValue_case:
                return GetValuesFromFrdListValue(singleFrd.GetValue().GetListValue())
            default:
                return []string{}, nil
            }
        }
    }
    return []string{}, fmt.Errorf("Frd Value contains unsupported value type %v", frdFieldKey)
}

这工作正常,因为它仍然返回我想要的值的数组。

但是我需要在单独的方法中操作返回的数组。但不能覆盖列表(interface{} 类型的变量)。

因此返回值需要类似于[]interface{}。但是,如果我有这样的情况,那么我会在各种返回语句中收到错误。

不能在 return 语句中使用 ([]stringliteral)([]string 类型的值)作为 []interface{} 值。

我在堆栈溢出或网络上找不到任何与此相关的内容,因此我们将不胜感激!


正确答案


您可以使用反射来循环未知类型的数组。这是一个简单的示例,仅打印出数组的元素。

https://play.golang.org/p/5umonjVp90D

package main

import (
    "fmt"
    "reflect"
)

func main() {
    doSomething([]string{"a", "b", "c"})
    doSomething([]int{1, 2, 3})
}

func doSomething(item interface{}) {
    reflectType := reflect.TypeOf(item)
    if reflectType.Kind() == reflect.Ptr {
        reflectType = reflectType.Elem()
    }

    if reflectType.Kind() != reflect.Slice {
        fmt.Println("received item is not a slice")
        return
    }

    val := reflect.ValueOf(item)

    itemLength := val.Len()
    for i := 0; i < itemLength; i++ {
        fmt.Println(val.Index(i))
    }
}

到这里,我们也就讲完了《Golang中如何返回未知类型的数组?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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