- golang方法
go语言没有面向对象的特性,也没有类对象的概念。但是,可以使用结构体来模拟这些特性,我们都知道面向对象里面有类方法等概念。我们也可以声明一些方法,属于某个结构体 - go语言方法的语法
go中方法,是一种特殊的函数,定义于struct之上(与struct关联、绑定),被称为struct的接受者(receiver)。通俗的讲,方法就是有接收者的函数
语法格式如下
type mytype struct{}
func (recv mytype) method_name(para) return_type {}
func (recv *mytype) method_name(para) return_type {}
- mytype 是定义的结构体
- recv 接受该方法的结构体
- method_name 方法名称
- para 参数列表
- return_type 返回值类型
实例
package mainimport "fmt"type Person struct {name, email string
}func (recv Person) Eat() {fmt.Printf("recv.name: %v eat\n", recv.name)
}type Customer struct {name string
}func (recv Customer) login(name string, password string) bool {fmt.Printf("recv: %v\n", recv)if name == recv.name && password == "123" {return true} else {return false}
}func main() {var p_person Person = Person{name: "tom",email: "tom@qq.com",}p_person.Eat()recv := Customer{name: "haha"}value := recv.login("haha", "123")fmt.Printf("value: %v\n", value)
}
- go语言方法的注意事项
- 方法的receiver type 并非一定要是struct类型,type定义的类型别名、slice、map、channel、func类型等都可以
- struct结合他的方法等价于面向对象中的类。只不过struct可以和他的方法分开写。并非一定要属于同一个文件,但必须属于同一个包
- 方法有两种接收类型(T Type)以及(T *Type)
- 方法就是函数,所以go中没有方法重载的说法,也就是说同一个类型中的所有方法名称必须唯一。
- 如果receiver是一个指针类型,则会自动解除引用
- 方法和type是分开的,意味着实例的行为和数据存储是分开的,但是他们通过receiver建立起关联关系