GO语言基础教程15——结构体-方法和接收者
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 }
一般来说需要修改接收者中的值或者接收者是拷贝代价比较大的大对象时使用指针接收者。