可以对包内的任意类型定义任意方法,但不能对来自其他包的类型或基础类型定义方法(可以通过自定义底层类型为基础类型的新类型,再对自定义的类型定义方法)。
方法只是一个含有特定接收者参数的函数。
一个方法的接收者必须是一个该类型的值或者该类型值的指针。
任何一个给定的类型的每个方法名必须唯一,不能同时定义两个相同名字的方法,并且golang中方法不支持重载方法。
声明一个结构的方法1
2
3
4
5
6// func(变量名 变量类型) 方法名(方法参数){
// 方法实现
// }
func (b B) Print() {
fmt.Println("B")
}
type定义的任意类型都可以声明方法
1 | package main |
接收者为指针的方法
使用类型的指针作为方法的接收者的好处:
- 可以避免在每个方法调用中进行值拷贝(在大的类型结构体中效率更高);
- 可以在方法中修改接收者指向的值