在Golang中如何从Person结构体数组生成以Name为键的嵌套映射结构
实现方案
你要的结构在Go中对应map[string]struct{ID string; Address string}类型,直接遍历数组赋值即可,以下是完整可运行的代码:
package main import ( "encoding/json" "fmt" "log" ) type Person struct { ID string `json:"id"` Name string `json:"name"` Address string `json:"address"` } var Group = []Person{ { ID: "1", Name: "Linda", Address: "London", }, { ID: "2", Name: "George", Address: "Paris", }, { ID: "3", Name: "John", Address: "Amsterdam", }, } func main() { // 初始化目标map result := make(map[string]struct { ID string Address string }) // 遍历结构体数组完成转换 for _, person := range Group { result[person.Name] = struct { ID string Address string }{ ID: person.ID, Address: person.Address, } } // 如果你需要输出符合预期的JSON格式,可以加序列化逻辑 jsonBytes, err := json.MarshalIndent(result, "", " ") if err != nil { log.Fatalf("JSON序列化失败: %v", err) } fmt.Println(string(jsonBytes)) }
注意事项
- 如果
Group中存在Name字段重复的元素,后遍历到的元素会直接覆盖同key的已有数据,如果你需要处理重名场景,可以在赋值前先判断result[person.Name]是否已存在,再做自定义逻辑处理。 - 如果你需要在多处复用内层结构的类型,也可以提前单独定义,减少重复代码:
type PersonInfo struct { ID string `json:"ID"` Address string `json:"Address"` } // 对应map声明改为 var result = make(map[string]PersonInfo)
内容的提问来源于stack exchange,提问作者Lee Maan
相关产品推荐
相关产品推荐

