golang函数传递指针和传递结构体,函数内部是如何屏蔽细节的?

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基础不好,感谢 各位指点。

阅读 3.2k
1 个回答
  • 通过反射可以知道入参到底是个什么Kind
  • 结构体指针和结构体,对Marshal函数来说也没什么区别,Elem函数可以通过结构体指针访问到指针指向的结构体Value。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏