func main(){
type ColorGroup struct {
ID int
Name string
Colors []string
}
group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
}
//第一种方式
b, err := json.Marshal(&group)
//第二种方式
b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
os.Stdout.Write(b)
}
//第一种方式
b, err := json.Marshal(&group)
//第二种方式
b, err := json.Marshal(group)
运行结果都是:{"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]}
这两种方式 得到的b结果都一样,go是值传递, 第一种是传递指针的拷贝,第二种方式是传递结构体的拷贝。
那么我想问题的问题是Marshall函数内部是如何 屏蔽 这个可以接收不同参数 细节的?
为什么传递指针和结构体都可以实现相同 效果?
go基础不好,感谢 各位指点。
反射
可以知道入参到底是个什么Kind。Marshal
函数来说也没什么区别,Elem函数可以通过结构体指针访问到指针指向的结构体Value。