Golang 中的方法和函数有什么区别?

在 Golang 中,方法和函数的区别主要在于接收者的不同。

  • 函数:函数是一段可以重用的代码,用于执行一个具体的任务。函数可以接收零个或多个参数,并且可以返回零个或多个值。
  • 方法:方法是作用于特定类型的函数。方法有一个接收者,接收者出现在 func 关键字和方法名之间。接收者可以是结构体类型或非结构体类型。

方法和函数的语法格式如下:

函数:

func name(parameter list) (return list) {
   ...
}

方法:

func (receiver) name(parameter list) (return list)  {
   ...  
}

例如:

// 函数
func add(x int, y int) int {
    return x + y
}

// Circle 结构体
type Circle struct {
    radius float64
}

// Circle 类型方法
func (c Circle) getArea() float64 {
    return 3.14 * c.radius * c.radius 
}

我们可以这样理解方法和函数:

  • 函数是一段可以重用的代码块,用于执行一些任务,没有接收者的概念。
  • 方法是作用于特定类型的函数,首参数是该类型的接收者。方法可以访问接收者的字段,实现对该类型的操作。

所以总结来说,方法和函数的区别在于是否有接收者这个概念。否则语法和调用上都很相似。
需要强调的是,在 Golang 中,方法就像其它函数调用一样,方法调用不会造成性能损失。这是因为方法调用会被 Go 编译器在编译时转为普通的函数调用。