You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:57:00