
func (t *T或T) MethodName(参数列表) (返回值列表) {
// 方法体
}
无论 receiver 参数的类型为 *T 还是 T,我们都把一般声明形式中的 T 叫做 receiver 参数 t 的基类型。如果 t 的类型为 T,那么说这个方法是类型 T 的一个方法;如果 t 的类型为 *T,那么就说这个方法是类型 *T 的一个方法。而且,要注意的是,每个方法只能有一个 receiver 参数,Go 不支持在方法的 receiver 部分放置包含多个 receiver 参数的参数列表,或者变长 receiver 参数
receiver参数的基类型本身不能是指针类型或者接口类型
Go语言中的方法的本质就是,一个以方法的receiver参数作为第一个参数的普通函数
当我们的方法M1采用类型为T的recevier参数时,代表T类型实例的receiver参数以值传递方式传递到M1方法体中的,实际上是T类型实例的副本,M1方法体中对副本的任何修改操作,都不会影响到原T类型实例
当我们的方法M2采用类型为*T的recevier参数时,代表*T类型实例的receiver参数以值传递方式传递到M2方法体中的,实际上是T类型实例的地址,M2方法体通过该地址可以对原T类型实例进行任何修改操作
方法集合是用来判断一个类型是否实现了某接口类型的唯一手段,可以说,“方法集合决定了接口实现”
Go语言规定,*T类型的方法集合包含所有以*T为receiver参数类型的方法,以及所有以T为receiver参数类型的方法