1、调用方式
方法:变量.方法名(实参列表)
函数:函数名.(实参列表)
结构体中字段大写开头表示可公开访问,小写表示私有(仅在定义当前结构体的包中可访问)。
2、定义
函数:func 函数名(形参,形参类型) [返回值类型] { }
func max(a, b int) int {
if a > b {
return a
}
return b
}
方法:func (接收者) 方法名(形参,形参类型) [返回值类型] { }
自己理解:
- 首先方法于函数在其他语言区别不大或没有区别
- go的方法类似于面向对象中类的方法,接收者大多为struct结构体(可以是任意类型)。
- struct作为类的属性,在定义一个接收者为此struct的方法,作为类的方法 ```go //方法定义 type persion struct { name string city string age int }
func (persion) eat(name string) string { return name + “在吃饭” }
调用:
```go
func main() {
x := persion{
name: "xiaohe",
city: "beijing",
age: 18,
}
fmt.Println(x.eat(x.name))
}
//输出:xiaohe在吃饭
接收者类型:
- 值接收者
- 指针接收者
区别:
- 使用值接收者定义方法时,使用的是值接收者的副本,无法修改接收者的值。
- 指针作为接收者的话,会修改接收者的值。
值接收者:
输出xiaohe,调用change_name方法,修改结构体数据失败。
func main() {
x := persion{
name: "xiaohe",
city: "beijing",
age: 18,
}
x.change_name()
fmt.Println(x.name)
}
//方法定义
type persion struct {
name string
city string
age int
}
func (p persion) eat(name string) string {
return name + "在吃饭"
}
func (p persion) change_name() {
p.name = "wangdebiao"
}
指针接收者:
输出wangdebiao,
func (p *persion) change_name() 将接收者的指针取的值最为接收者,直接修改struct的值。
func main() {
x := persion{
name: "xiaohe",
city: "beijing",
age: 18,
}
x.change_name()
fmt.Println(x.name)
}
//方法定义
type persion struct {
name string
city string
age int
}
func (p persion) eat(name string) string {
return name + "在吃饭"
}
func (p *persion) change_name() {
p.name = "wangdebiao"
}