方法Method
是种作用域特殊类型变量的函数,特定类型的变量称为接收者receiver
。接收者类似Python中的self
。方法的定义格式
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
函数体
}
Person
类型的p
,Student
类型的s
package main
import (
"fmt"
)
//结构体
type Person struct {
name string
age int8
}
// 构造函数,通常是new开头
// 构造函数通常返回的是指针地址,减小开销
func NewPerson(name string, age int8) *Person{ //返回值是指针
return &Person{
name: name,
age: age,
}
}
// 为Person类定义方法
func (p Person) Dream(){ //Dream()是给谁的,传给接收者
fmt.Printf("%s的梦想是学好go和Python\n", p.name)
}
// 指针接收者:接收者的类型是指针
func (p *Person) setAge(newAge int8){
p.age = newAge
}
// 使用值类型接收者
func (p Person) setAge2(newAge int8){
p.age = newAge
}
func main(){
p1 := NewPerson("Peter", 22) //调用函数
//(*p1).Dream() 语法糖,*p1地址:对应的变量
p1.Dream() //Dream()是属于Person类型的,指针类型转成变量
fmt.Println(p1.age) //22
p1.setAge(int8(25))
fmt.Println(p1.age) //25 指针接收者能够改变
p1.setAge2(int8(30))
fmt.Println(p1.age) //25
}
可以将内置的类型使用关键字type来进行自定义类型,然后为自定义的类型添加方法,下面通过一个栗子来表示如何自定义和使用自定义类型:16
//将内置的int定义为myInt类型
type myInt int
//接收者类型为上面自定义的myInt类型
func (m myInt) sayHello(){
fmt.Println("hello 我是int")
}
func main(){
var m1 myInt
m1.sayHello()
m1 = 100
fmt.Printf("%#v %T\n", m1, m1)
}