引言:在Go语言中方法和函数本身没有太大的区别,而区别主要体现在细节上
一:方法需要指定所属类型,可以是结构体也可以是自定义type,函数则通用
```
func (person Person) ShowInfo(形参) 返回值{
person.Name = "123"
person.Age = 12
fmt.Printf("name=%v,age=%v",person.Name,person.Age)
}
```
person为类型的形参,类型为Person
二:方法的调用需要指定类型变量调用,函数则不需要
```
var p testMethod.Person
p.Name = "tom"
p.Age = 123
p.ShowInfo()
注:方法和函数的访问权限都受大小写影响,小写本包,大写全局
三:函数的形参与传参类型需要一致,方法可以改变
```
func (person *Person) ShowInfo(形参) 返回值{
person.Name = "123"
person.Age = 12
fmt.Printf("name=%v,age=%v",person.Name,person.Age)
}
(1)这里方法的类型形参为指针,调用时可以使用 p.ShowInfo()或者 (&p).ShowInfo(),本质上都是后者,只不过Go的设计者对于方法的调用做了底层优化
func (person Person) ShowInfo(形参) 返回值{
person.Name = "123"
person.Age = 12
fmt.Printf("name=%v,age=%v",person.Name,person.Age)
}
(2)这里方法的形参类型为数值型,默认为值传递,而在调用时可以使用p.ShowInfo()或者 (&p).ShowInfo(),但依旧是值拷贝
func test01(i *int) {
}
(3)对于函数则需保持一致,需要的形参为指针,则传入的形参需为地址值,否则编译无法通过