类型*T方法集

// code_018_struct_method_set project main.go
package main

import (
	"fmt"
)

//类型*T方法集
type Person struct {
	name string
	sex  byte
	age  int
}

//指针作为接收者,引用语义
func (p *Person) SetInfoPointer() {
	(*p).name = "yoyo"
	p.sex = 'f'
	p.age = 22
}

//值作为接收者,值语义
func (p Person) SetInfoValue() {
	p.name = "xxx"
	p.sex = 'm'
	p.age = 33
}

func main() {
	//p 为指针类型
	var p *Person = &Person{"mike", 'm', 18}
	p.SetInfoPointer() //func (p) SetInfoPointer()
	fmt.Println(p)

	p.SetInfoValue() //func (*p) SetInfoValue()
	fmt.Println(p)
	(*p).SetInfoValue() //func (*p) SetInfoValue()
	fmt.Println(p)
}

类型T的方法集

// code_018_struct_method_set2 project main.go
package main

import (
	"fmt"
)

//类型T方法集
type Person struct {
	name string
	sex  byte
	age  int
}

func (p *Person) SetInfoPointer() {
	(*p).name = "yoyo"
	p.sex = 'f'
	p.age = 22
}

func (p Person) SetInfoValue() {
	p.name = "xxx"
	p.sex = 'm'
	p.age = 33
}

func main() {
	//p为普通类型
	var p Person = Person{"ck_go", 'm', 18}
	(&p).SetInfoPointer()
	p.SetInfoPointer()

	p.SetInfoValue()
	(&p).SetInfoValue()
	fmt.Println(p)
}