GO语言基础教程15——结构体-方法和接收者

244 阅读1分钟

GO语言基础教程15——结构体-方法和接收者

构造函数

Go语言的结构体没有构造函数,我们可以自己实现。

例如:

func newPerson(name, city string, age int8) *person {
	return &person{
		name: name,
		city: city,
		age:  age,
	}
}

调用构造函数

p := newPerson("likuis", "福建", 18)
fmt.Printf("%#v\n", p9) //&main.person{name:"likuis", city:"福建", age:18}

方法和接收者

Go语言中的方法(Method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self

方法的定义格式如下:

func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
    函数体
}

例如:

//Person 结构体
type Person struct {
	name string
	age  int
}

//NewPerson 构造函数
func NewPerson(name string, age int) *Person {
	return &Person{
		name: name,
		age:  age,
	}
}

//Dream Person做梦的方法
func (p Person) Dream() {
	fmt.Printf("%s想吃饭\n", p.name)
}

func main() {
	p1 := NewPerson("likuis", 18)
	p1.Dream()
}

方法与函数的区别是,函数不属于任何类型,方法属于特定的类型。

指针类型接收者

func (p *Person) SetName(newName string) {
	p.age = newName
}

调用该方法:

func main() {
	p1 := NewPerson("likuis", 18)
	fmt.Println(p1.name) // likuis 
	p1.SetName("刘德华")
	fmt.Println(p1.name) // 刘德华
}

值类型接收者

func (p Person) SetAge(newAge int) {
	p.age = newAge
}

func main() {
	p1 := NewPerson("likuis", 18)
	fmt.Println(p1.age) // 18
	p1.SetAge(30)
	fmt.Println(p1.age) // 18
}

一般来说需要修改接收者中的值或者接收者是拷贝代价比较大的大对象时使用指针接收者。

(点击进入专栏查看详细教程)