go语言中有两种类型的接收者:值类型的接收者和引用类型的接收者
如果使用值接收者声明方法,调用时会使用这个值的一个副本来执行。
当调用使用指针接受者声明的方法时,这个方法会共享调用方法时接收者所指向的值。
内置类型(值传递):数值类型,字符串类型,布尔类型
引用类型(应用传递):切片,映射,通道,接口,函数类型
规范里定义的方法集的规则:
Values | Methods Receivers |
---|---|
T | (t T) |
*T | (t T)and(t *T) |
从接收者类型的角度来看方法集:
Methods Receviers | Values |
---|---|
(t T) | T and *T |
(t *T) | *T |
postscript:
package main
import "fmt"
type Info interface {
message()
}
type User struct{
name string
age int
}
func (u *User) message() {
fmt.Printf("name:%s,age:%d\n",u.name,u.age)
}
func sendInfo(i Info){
i.message()
}
func main() {
u:=&User{
name: "zs",
age: 12,
}
sendInfo(u)
}