Golang序列化时,传指针和传变量本身的区别

结论

指针值则编码其指向的值。 nil指针则编码为空JSON值。通过reflect包中的Elem方法实现。

函数原型

官方文档中是这样说明的:

尝试:

package main

import (
	"fmt"
	"encoding/json"
)

// 定义一个结构体,用于被序列化
type Monster struct{
	Age int
	Name string
	Skill string
}

func main(){
	var monster Monster = Monster{500, "牛魔王", "牛动拳"}
	data1, err1 := json.Marshal(monster) // 直接传结构体本身
	if err1!=nil{
		fmt.Println("序列化monster时,发生错误", err1)
		return 
	}
	data2, err2 := json.Marshal(&monster) // 传结构体的地址
	if err2!=nil{
		fmt.Println("序列化&monster时,发生错误", err2)
		return 
	}
	data3, err3 := json.Marshal(3.14) // 对基本数据类型的序列化意义不大
	if err3!=nil{
		fmt.Println("序列化3.14时,发生错误", err3)
		return 
	}

	fmt.Println("data1 =", string(data1))
	fmt.Println("data2 =", string(data2))
	fmt.Println("data3 =", string(data3))
}

结果:

原文地址:https://www.cnblogs.com/pangqianjin/p/14403328.html