普通变量和指针变量

1 方法使用指针变量时,会直接修改调用该方法的对象,而用普通变量则不会

//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语言!
", 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)

}
原文地址:https://www.cnblogs.com/xxswkl/p/13948496.html