一尘不染

Go中的functions 和 methods有什么区别?

go

据我目前的理解:函数是“全局的”,这意味着我不必导入包来使用函数,它们总是存在的。方法绑定到包。这个对吗?


阅读 139

收藏
2021-12-22

共1个答案

一尘不染

据我目前的理解:函数是“全局的”,这意味着我不必导入包来使用函数,它们总是存在的。方法绑定到包。这个对吗?

不,那是不正确的。内置包中只有几个函数始终可用。其他一切都需要导入。

术语“方法”是在面向对象编程中提出的。在 OOP 语言(例如 C++)中,您可以定义一个“类”,它封装了属于一起的数据和函数。类中的那些函数称为“方法”,您需要该类的实例来调用这样的方法。

在 Go 中,术语基本相同,尽管 Go 不是经典意义上的 OOP 语言。在 Go 中,接受接收者的函数通常称为方法(可能只是因为人们仍然习惯于 OOP 的术语)。

因此,例如:

func MyFunction(a, b int) int {
  return a + b
}
// Usage:
// MyFunction(1, 2)

type MyInteger int
func (a MyInteger) MyMethod(b int) int {
  return a + b
}
// Usage:
// var x MyInteger = 1
// x.MyMethod(2)
2021-12-22