普通变量和指针变量 值传递和引用传递

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语言!\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)

}
View Code

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

 

posted on 2020-11-09 14:35  吃我一枪  阅读(270)  评论(0编辑  收藏  举报

导航