【Golang系列】-方法

2022-03-17

方法

go语言没有面向对象的特性,也没有类对象的概念,但是,可以使用结构体来模拟这些特性,我们都知道面向对象里面有类方法等概念,我们也可以声明一些方法,属于某个结构体。

go语言方法的语法

go中的方法,是一种特殊的函数,定义于struct之上(与struct关联、绑定),被称为struct的接受者(receiver)
方法就是有接受者的函数

语法:

type mytype struct{}

func (recv mytype)my_method(para)return_type{}
func (recv *mytype)my_method(para)return_type{}

  • mytype:定义一个结构体
  • recv:接受该方法的结构体
  • my_method:方法名称
  • para:参数列表
  • return_type:返回值类型
    从语法格式可以看出,一个方法和一个函数非常相似,多了一个接受类型。
package main

import "fmt"

type Person struct {
    name string
}

func (per Person) eat() {
    fmt.Println(per.name + "eating...")
}

func (per Person) sleep() {
    fmt.Println(per.name + "sleep...")
}

func main() {
    var per Person
    per.name = "tom"
    per.eat()
    per.sleep()
}

结果:

tom eating...
tom sleep...

go语言方法的注意事项

方法的receiver type并非一定要是struct类型,type定义的类型别名、slice/map/channel/func类型都可以
struct结合他的方法就等价于面向对象的类,只不过struct可以和她的方法分开,并非一定要属于同一个文件,但必须属于同一个包
方法有两种接受类型:(T Type)和(T *Type) 他们之间有区别