关于golang:goalng-中结构体方法的区别使用

package main

import "fmt"

//不论调用模式如何(调用者是值类型还是援用类型),真正决定是值拷贝还是地址拷贝的,要看办法的接收者是什么类型;
//如: (p Person) 则进行的是值拷贝,(p *Person) 是地址拷贝;
// 申明的变量, 不论是值类型,指针类型, 都能够调用setAge办法,setName 办法
func main() {
    //var p Person
    //var p = new(Person)
    //var p3 = &Person{}
    var p4 = Person{
        Name: "小明",
        Age:  12,
    }
    p4.setName()
    p4.setAge()
    fmt.Println(p4)

    var p5 = Person{
        Name: "小笨",
        Age:  8,
    }
    p5.setName()
    p5.setAge()
    fmt.Println(p5)
}

type Person struct {
    Name string
    Age  int
}

// 接收者为实例变量的正本,在办法内更改值不会影响原来的值
func (p Person) setAge() {
    p.Age = 16
}

//接收者为实例变量地址的正本,在办法内更改值会扭转原来的值
func (p *Person) setName() {
    p.Name = "小江"
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理