普通变量和指针变量 值传递和引用传递
1 方法使用指针变量时,会直接修改调用该方法的对象,而用普通变量则不会
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//Person 结构体 type Person struct { name string age int8 } //NewPerson 构造函数 func NewPerson(name string, age int8) *Person { return &Person{ name: name, age: age, } } //Dream Person做梦的方法 func (p Person) Dream() { fmt.Printf("%s的梦想是学好Go语言!\n", p.name) } // p为普通变量时,进去之后是一个新的对象,即地址和调用这个方法的对象是两个地址,所以修改值后不会改变原对象 // p为指针变量时,修改值是是直接在原对象上修改的, func (p Person) SetAge(age int8){ p.age = age fmt.Println(p) println(&p) // 若p是个指针变量,则用println输出的时候是个地址 // 若p是个普通变量,无法用println输出,因为里面是具体的Person对象,要用fmt.Println()才能输出, //println(p) } func main() { p1 := NewPerson("测试", 20) println(p1) p1.SetAge(50) }
2 值传递数据类型有5种:int、float、string、bool和数组
引用传递数据类型有4种:map、channel、slice和interface
https://www.cnblogs.com/qstudy/p/10201106.html
https://www.cnblogs.com/qstudy/p/10201106.html