【问题标题】:How to convert map[string][]byte to map[string]interface{}如何将 map[string][]byte 转换为 map[string]interface{}
【发布时间】:2021-05-26 05:19:29
【问题描述】:

我有一个函数,除了 map[string]interface{} 类型的参数,但我有 map[string][]byte 类型的变量。我的问题是如何在 Go 中将 map[string][]byte 转换为 map[string]interface{}。

【问题讨论】:

标签: go


【解决方案1】:

这是 go 中常见的错误期望。在这种情况下,地图的每个元素都需要转换为界面。 所以这里有一个示例代码的解决方法:

func foo(arg map[string]interface{}){
    fmt.Println(arg)
}

// msaToMsi convert map string array of byte to map string interface
func msaToMsi(msa map[string][]byte) map[string]interface{}{
    msi := make(map[string]interface{}, len(msa))
   for k, v := range msa {
       msi[k] = v
    }
    return msi
}

func main() {
    msa := map[string][]byte{"a": []byte("xyz")}
    foo(msaToMsi(msa))
}

以下映射或数组转换的解决方案也类似: map[string]stringmap[string]interface{} []string[] interface {} 等等。

【讨论】:

    【解决方案2】:

    好的,回答您的问题,可以在您传递或接收不确定其类型的对象/结构的情况下使用 GO 中的接口。

    例如:

    type Human struct {
        Name string
        Age int
        School string
        DOB time.Time
    }
    
    type Animal struct {
        Name string
        HasTail bool
        IsMamal bool
        DOB time.Time
    }
    
    func DisplayData(dataType interface{}, data byte) 
    

    这个显示数据函数可以显示任何类型的数据,它接受数据和结构体,直到我们将它们传入函数才知道...数据可以是人类或动物,两者都有不同的可以根据我们传递给函数的接口映射的值...

    这意味着我们可以重用代码来显示任何数据,只要我们告诉函数我们要将数据映射到并显示的数据类型(即动物或人类......)

    在您的情况下,解决方案是将数据类型、字节中的数据结构定义为结构以及在哪里制作地图而不是 map[string][]byte 尝试更改为 map[string]YourDefinedStructure

    并将其传递给接受map[string]interface{} 的函数。

    希望这会有所帮助,尽管您提供了数据类型,但问题是相当模糊,因为接受map[string]interface{} 的函数的用例和性质会影响所采用的方法。

    【讨论】:

      【解决方案3】:

      在将 map[string][]byte 传递给函数时,您实际上不必进行转换。 转换需要发生在您要使用地图中的值的地方。

      【讨论】:

        猜你喜欢
        • 2015-01-14
        • 2016-07-29
        • 1970-01-01
        • 2013-05-24
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多