1、调用方式

方法:变量.方法名(实参列表)
函数:函数名.(实参列表)

结构体中字段大写开头表示可公开访问,小写表示私有(仅在定义当前结构体的包中可访问)。

2、定义

函数:func 函数名(形参,形参类型) [返回值类型] { }

  1. func max(a, b int) int {
  2. if a > b {
  3. return a
  4. }
  5. return b
  6. }

方法:func (接收者) 方法名(形参,形参类型) [返回值类型] { }
自己理解:

  • 首先方法于函数在其他语言区别不大或没有区别
  • go的方法类似于面向对象中类的方法,接收者大多为struct结构体(可以是任意类型)。
  • struct作为类的属性,在定义一个接收者为此struct的方法,作为类的方法 ```go //方法定义 type persion struct { name string city string age int }

func (persion) eat(name string) string { return name + “在吃饭” }

  1. 调用:
  2. ```go
  3. func main() {
  4. x := persion{
  5. name: "xiaohe",
  6. city: "beijing",
  7. age: 18,
  8. }
  9. fmt.Println(x.eat(x.name))
  10. }
  11. //输出:xiaohe在吃饭

接收者类型:

  • 值接收者
  • 指针接收者

区别:

  • 使用值接收者定义方法时,使用的是值接收者的副本,无法修改接收者的值。
  • 指针作为接收者的话,会修改接收者的值。

值接收者:
输出xiaohe,调用change_name方法,修改结构体数据失败。

  1. func main() {
  2. x := persion{
  3. name: "xiaohe",
  4. city: "beijing",
  5. age: 18,
  6. }
  7. x.change_name()
  8. fmt.Println(x.name)
  9. }
  10. //方法定义
  11. type persion struct {
  12. name string
  13. city string
  14. age int
  15. }
  16. func (p persion) eat(name string) string {
  17. return name + "在吃饭"
  18. }
  19. func (p persion) change_name() {
  20. p.name = "wangdebiao"
  21. }

指针接收者:
输出wangdebiao,
func (p *persion) change_name() 将接收者的指针取的值最为接收者,直接修改struct的值。

  1. func main() {
  2. x := persion{
  3. name: "xiaohe",
  4. city: "beijing",
  5. age: 18,
  6. }
  7. x.change_name()
  8. fmt.Println(x.name)
  9. }
  10. //方法定义
  11. type persion struct {
  12. name string
  13. city string
  14. age int
  15. }
  16. func (p persion) eat(name string) string {
  17. return name + "在吃饭"
  18. }
  19. func (p *persion) change_name() {
  20. p.name = "wangdebiao"
  21. }