Golang中结构体与映射的用法解析及示例代码分享
Golang中结构体与映射的用法解析及示例代码分享 https://play.golang.org/p/u8iLBDDm2YP
为什么这段代码只显示第二个人的结果,而不显示第一个人的?
5 回复
有趣。我会尝试修改这个。
由于两个条目具有相同的键("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"}
关键修改:
- 将
Name字段拆分为FirstName和LastName - 为每个字段指定唯一的JSON标签:
json:"first_name"和json:"last_name"
原始代码中两个字段都使用json:"name"标签,导致JSON序列化时出现字段冲突,只有最后一个字段的值被保留。通过为每个字段分配唯一的JSON标签,可以正确序列化所有字段数据。

