golang方法和函数的区别
package main import "fmt" type Person struct { Name string } //函数 //对于普通函数,接受者为值类型时,不能将指针类型的数据直接传递,反之亦然 func test01(p Person) { fmt.Println(p.Name) } //指针类型 func test02(p *Person) { fmt.Println(p.Name) } //对于方法,接受者为值类型时,可以直接用指针类型的变量调用方法,反之亦然 func (p Person) test03() { p.Name = "jack" fmt.Println("test03() =", p.Name) //jack } func (p *Person) test04() { p.Name = "mary" fmt.Println("test04() =", p.Name) //mary } func main() { //不管调用形式如何,真正决定是值拷贝还是地址拷贝,看这个方法是和哪种类型绑定的 //如果是和值类型绑定,则为值拷贝。如果是和指针类型绑定,则是地址拷贝 p := Person{"tom"} test01(p) test02(&p) p.test03() fmt.Println("main() =", p.Name) //tom (&p).test04() fmt.Println("main() =", p.Name) //mary }