Golang中结构体与映射的用法解析及示例代码分享

Golang中结构体与映射的用法解析及示例代码分享 https://play.golang.org/p/u8iLBDDm2YP

为什么这段代码只显示第二个人的结果,而不显示第一个人的?

5 回复

*做

更多关于Golang中结构体与映射的用法解析及示例代码分享的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


有趣。我会尝试修改这个。

由于两个条目具有相同的键("Jones"),最后插入的项会覆盖之前的项。

在您提供的代码中,问题出现在结构体字段的JSON标签定义上。结构体Person的字段使用了相同的JSON标签"name",这导致在序列化到JSON时,第二个字段覆盖了第一个字段的值。

以下是修正后的代码示例:

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	FirstName string `json:"first_name"`
	LastName  string `json:"last_name"`
}

func main() {
	p := Person{FirstName: "John", LastName: "Doe"}
	b, err := json.Marshal(p)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(string(b))

	p2 := Person{FirstName: "Jane", LastName: "Smith"}
	b2, err := json.Marshal(p2)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(string(b2))
}

输出:

{"first_name":"John","last_name":"Doe"}
{"first_name":"Jane","last_name":"Smith"}

关键修改:

  1. Name字段拆分为FirstNameLastName
  2. 为每个字段指定唯一的JSON标签:json:"first_name"json:"last_name"

原始代码中两个字段都使用json:"name"标签,导致JSON序列化时出现字段冲突,只有最后一个字段的值被保留。通过为每个字段分配唯一的JSON标签,可以正确序列化所有字段数据。

回到顶部