Golang Go语言中多个 map 同时赋值给多个结构体问题

发布于 1周前 作者 songsunli 来自 Go语言

Golang Go语言中多个 map 同时赋值给多个结构体问题

如题 有五个 map 每个 map 有 8 到九个 k 。同时有九个结构体 每个结构体含有五个元素。有什么办法把这些 map 的九个键分别写到不同结构体里面吗?或者说这种数据结构就不合适这么做?

7 回复

go 就是不隐藏时间复杂度,所以肯定是写循环
for key, value := range m {
…插入到九个结构体之一
}

更多关于Golang Go语言中多个 map 同时赋值给多个结构体问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这样得写五个循环了。。。

循环又不慢(虽说遍历 map 很慢,但这个情况遍历是跑不掉的)
也就是代码看起来难看点罢了

如果每个 map 的 key 都是一样的话,倒是一个循环也许能解决,否则的话也就只能按上面的来了

Key 不太一样 有的八个 有的九个 多个循环看着太难看了 改结构体内的类型为数组 只保留一个结构体 把五个 map 分别 append 后 放的结构体里面 看着好多了😌

我喜欢 for 循环.难看的话抽一个函数出来,或者 github 上找找有没有这种函数.

已经写完了😂

在Go语言中,当你需要将多个map同时赋值给多个结构体时,通常会遇到一些挑战,因为Go不支持直接的多值返回并同时赋值给多个接收者的语法糖。不过,你可以通过一些编程技巧来实现这一点。

首先,确保你的结构体定义与map的键和值类型相匹配。例如,如果你的结构体是type Person struct { Name string; Age int },那么你的map应该是map[string]int(假设你只想赋值年龄),或者map[string]map[string]interface{}(如果你需要更复杂的数据结构)。

一种方法是遍历map,然后逐个为结构体字段赋值。如果map的键和值可以直接映射到结构体的字段,这通常是最直接的方法。

另一种方法是使用反射(reflect包),这在处理动态类型或不确定的结构体字段时非常有用。但请注意,反射会增加代码的复杂性和运行时的开销,因此应谨慎使用。

如果多个map需要合并到一个结构体中,你可能需要首先将这些map合并到一个中间结构中,然后再将这个中间结构赋值给目标结构体。这可以通过创建一个临时map或使用结构体初始化时直接赋值来实现。

总之,虽然Go语言没有直接支持这种多map到多结构体的赋值,但通过适当的编程技巧,你仍然可以实现这一功能。

回到顶部