编辑代码

package main
import "fmt"

type per struct {
    id int
    name string
}

func main () {
    a := "123"
    b := &a

    fmt.Printf("type: %T, address: %p, value: %v\n", *b,b,*b)
    fmt.Printf("type: %T, address: %p, value: %v\n", a, a, a)
    fmt.Printf("type: %T, address: %p, value: %v\n", &b, &b, &b)
    fmt.Printf("type: %T, address: %p, value: %v\n", &a, &a, &a)
    fmt.Printf("type: %T, address: %p, value: %v\n", b, b, b)

    changeS(&a)
    fmt.Printf("type: %T, address: %p, value: %v\n", a, &a, a)

    d := [3]int{1,2,3}
    fmt.Println(d)
    change(&d)
    fmt.Println(d)



    var zhuang per=per{id: 1, name: "zhuang"}
    var yan=new(per)
    yan.id=10
    fmt.Println("zhuang: ", zhuang)
    fmt.Println("yan: ", *yan)
    hao := *yan
    hao.id=999
    fmt.Println("yan: ", yan)
    fmt.Println("hao: ", hao)
    
    f := zhuang.chans()
    fmt.Println(f.id)
    fmt.Println(zhuang)
    // chans2(&zhuang)
    // fmt.Println(zhuang)
    // zhuang.id = 9
    // fmt.Println(zhuang)
    // fmt.Printf("type: %T, address: %p, value: %v\n", zhuang, zhuang, zhuang)
    // t := &zhuang
    // t.id = 11
    // fmt.Println(t)
    // fmt.Println(*t)
    // fmt.Printf("type: %T, address: %p, value: %v\n", t, t, t)
    // fmt.Println(t)
    // chans3(zhuang)
    // fmt.Println(t)
}

func changeS(b *string) {
    *b = "changed"
    fmt.Println(*b)
}

func change(b *[3]int) {
    b[0] = 4
    fmt.Println(*b)
}

func (p per) chans() per {
  p.id = 5
//   fmt.Println(*p)
  return p
} 

func chans2(p *per) {
    p.id = 7
    fmt.Println(*p)
} 

func chans3(p per) {
    p.id = 7
    fmt.Println(p)
} 

https://zhuanlan.zhihu.com/p/370707755