go 语言中没有类,但是是有方法。
方法的定义:
func (recevier type) methodName(参数列表)(返回值列表){ }
type School struct {Name stringAddr string }func NewSchool(name, addr string) *School {return &School {Name:name,Addr:addr,} }func (s *School) GetName() string { //定义方法 s 接收者类型 GetName方法名字return s.Name }func (s *School) GetAddr() string {return s.Addr } func testmodel(){school := NewSchool("北京大学","北京海淀区")fmt.Println(school.GetAddr()) //school.GetAddr 方法的调用fmt.Println(school.Getname())} //运行结果 北京海淀区 北京大学
方法和函数有什么区别呢?
函数可以说谁都可以调用,而方法只有接收者类型相同的才可以调用。当然了,定义上也是不同的,方法是包含了接收者的函数。
下面演示一个例子,说明方法接收者值传递和引用传递的区别
package mainimport ("fmt"
)type Int int //自定义类型Intfunc (i *Int) add(a, b int) { //接收者类型是Int类型的指针,引用类型*i = Int(a + b)return
}
func (i Int) Add(a, b int) { //接收者类型是Int类型,值类型i = Int(a + b)return
}
func main() {var b Intvar c Intb.add(100, 200) //300 些时传入的接者i是&b,就是变量b的地址相当于(&b).add(100,200),add方法内部:*(&b)=Int(100+200) 就是这个i指针指向的变量b的值改变为300fmt.Println(b)c.Add(100,200) //值传递不带回主函数fmt.Println(c) // 0}