go语言 方法
go 语言中没有类,但是是有方法。
方法的定义:
func (recevier type) methodName(参数列表)(返回值列表){ }
type School struct {
Name string
Addr 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 main
import (
"fmt"
)
type Int int //自定义类型Int
func (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 Int
var c Int
b.add(100, 200) //300 些时传入的接者i是&b,就是变量b的地址相当于(&b).add(100,200),add方法内部:*(&b)=Int(100+200) 就是这个i指针指向的变量b的值改变为300
fmt.Println(b)
c.Add(100,200) //值传递不带回主函数
fmt.Println(c) // 0
}

浙公网安备 33010602011771号