256_尚硅谷_序列化struct时 tag使用

1.结构体定义字段的反射机制5.结构体定义字段的反射机制
package main

import (
	"encoding/json"
	"fmt"
)

// 定义一个结构体
type Monster struct {
	// ! 例:`json:"monster_name"`, 这是反射机制,理解为重定义序列化结构体后的字段名
	Name     string  `json:"monster_name"`
	Age      int     `json:"monster_age"`
	Birthday string  `json:"monster_birthday"`
	Sal      float64 `json:"monster_sal"`
	Skill    string  `json:"monster_skill"`
}

func testStruct() {
	// 演示
	monster := Monster{
		Name:     "name1",
		Age:      500,
		Birthday: "2021-11-11",
		Sal:      8000.0,
		Skill:    "skill1",
	}

	// 将monster序列化,使用json.Marshal方法执行序列化
	data, err := json.Marshal(&monster)
	if err != nil {
		fmt.Printf("序列化错误, err= %v\n", err)
	}
	// 输出序列化后的结果
	fmt.Printf("monster序列化后= %v\n", string(data))
}

func main() {
	// 演示将结构体, map, 切片进行序列号
	testStruct()
}

2.结构体字段名小写开头,则json.Marshal()方法不会序列化该字段2.结构体字段名小写开头,则json.Marshal()方法不会序列化该字段

package main

import (
	"encoding/json"
	"fmt"
)

// 定义一个结构体
type Monster struct {
	// ! 例:`json:"monster_name"`, 这是反射机制,理解为重定义序列化结构体后的字段名
	// Name     string  `json:"monster_name"`
	name     string  `json:"monster_name"`
	Age      int     `json:"monster_age"`
	Birthday string  `json:"monster_birthday"`
	Sal      float64 `json:"monster_sal"`
	Skill    string  `json:"monster_skill"`
}

func testStruct() {
	// 演示
	monster := Monster{
		// Name:     "name1",
		name:     "name1",
		Age:      500,
		Birthday: "2021-11-11",
		Sal:      8000.0,
		Skill:    "skill1",
	}

	// 将monster序列化,使用json.Marshal方法执行序列化
	data, err := json.Marshal(&monster)
	if err != nil {
		fmt.Printf("序列化错误, err= %v\n", err)
	}
	// 输出序列化后的结果
	fmt.Printf("monster序列化后= %v\n", string(data))
}

func main() {
	// 演示将结构体, map, 切片进行序列号
	testStruct()
}

posted on 2026-02-27 11:14  与太阳肩并肩  阅读(1)  评论(0)    收藏  举报

导航