go語言之進階篇值語義和引用語義

package main
 
import "fmt"
 
type Person struct {
    name string //名字
    sex  byte   //性別, 字符類型
    age  int    //年齡
}
 
//修改成員變量的值
 
//接收者爲普通變量,非指針,值語義,一份拷貝
func (p Person) SetInfoValue(n string, s byte, a int) {
    p.name = n
    p.sex = s
    p.age = a
    fmt.Println("p = ", p)
    fmt.Printf("SetInfoValue &p = %p\n", &p)
}
 
//接收者爲指針變量,引用傳遞
func (p *Person) SetInfoPointer(n string, s byte, a int) {
    p.name = n
    p.sex = s
    p.age = a
 
    fmt.Printf("SetInfoPointer p = %p\n", p)
}
 
func main() {
    s1 := Person{"go", 'm', 22}
    fmt.Printf("&s1 = %p\n", &s1) //打印地址
 
    //值語義
    //  s1.SetInfoValue("mike", 'm', 18)
    //  fmt.Println("s1 = ", s1) //打印內容
 
    //引用語義
    (&s1).SetInfoPointer("mike", 'm', 18)
    fmt.Println("s1 = ", s1) //打印內容
}

#執行結果:

&s1 = 0xc00005a400
 
SetInfoPointer p = 0xc00005a400
 
s1 =  {mike 109 18}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章