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 + “在吃饭” }
调用:```gofunc 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 stringcity stringage 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 stringcity stringage int}func (p persion) eat(name string) string {return name + "在吃饭"}func (p *persion) change_name() {p.name = "wangdebiao"}
