Golang:struct结构体方法中关于值接收者和指针接受者的区别2

package main

import "fmt"

type Person struct { //定义一个Person结构体
	Name string //定义一个string类型的Name字段
}

func (p Person) ChangeInfo1() { //定义一个Person结构体的方法,接收者类型为值接收者(因为p的类型为Person)
	p.Name = "二麻子1"
}

func (p *Person) ChangeInfo2() { //定义一个Person结构体的方法,接收者类型为指针接收者(因为p的类型为Person)
	p.Name = "二麻子2"
}

func main() {
	p1 := Person{ //初始化一个Person结构体的实例化对象p1
		Name: "虚花1",
	}
	p1.ChangeInfo1()
	fmt.Printf("%#v\n", p1)

	p2 := Person{ //初始化一个Person结构体的实例化对象p2
		Name: "虚花2",
	}
	p2.ChangeInfo2()
	fmt.Printf("%#v\n", p2)

/*
由此引发结论:
ChangeInfo1接收者p类型为值类型(Person),相当于对接收者的数据进行拷贝,当接收者.Name重新赋值时,其实上是拷贝的数据重新赋值;
ChangeInfo2接收者p类型为指针类型(*Person),当接收者.Name重新赋值时,其实上是源数据数据重新赋值;
所以结果是p1的值没有被修改,p2的值被修改了。这里边儿涉及到指针的知识,感兴趣的可以去了解了解。
*/

}

你可能感兴趣的:(golang,golang,数据结构,c++)