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
}

  

posted @ 2022-03-08 21:22  Star_Gazer  阅读(63)  评论(0编辑  收藏  举报