【发布时间】:2021-05-26 05:19:29
【问题描述】:
我有一个函数,除了 map[string]interface{} 类型的参数,但我有 map[string][]byte 类型的变量。我的问题是如何在 Go 中将 map[string][]byte 转换为 map[string]interface{}。
【问题讨论】:
-
使用循环:创建一个新的
map[string]interface{},遍历您拥有的地图并填充它。
标签: go
我有一个函数,除了 map[string]interface{} 类型的参数,但我有 map[string][]byte 类型的变量。我的问题是如何在 Go 中将 map[string][]byte 转换为 map[string]interface{}。
【问题讨论】:
map[string]interface{},遍历您拥有的地图并填充它。
标签: go
这是 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]string 到 map[string]interface{}
[]string 到 [] interface {}
等等。
【讨论】:
好的,回答您的问题,可以在您传递或接收不确定其类型的对象/结构的情况下使用 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{} 的函数的用例和性质会影响所采用的方法。
【讨论】:
在将 map[string][]byte 传递给函数时,您实际上不必进行转换。 转换需要发生在您要使用地图中的值的地方。
【讨论】: