当前位置: 首页 > 面试题库 >

Go中的功能和方法有何不同?

何涵衍
2023-03-14
问题内容

我正在尝试开始使用Go,并且文档非常好。我在文档中找不到的是函数和方法之间的区别。

据我目前的了解:函数是“全局”的,这意味着我不必导入包即可使用函数,它们始终存在。方法绑定到包。这样对吗?


问题答案:

据我目前的了解:函数是“全局”的,这意味着我不必导入包即可使用函数,它们始终存在。方法绑定到包。这样对吗?

不,那是不正确的。内置软件包中只有几个功能始终可用。其他所有内容都需要导入。

术语“方法”是面向对象的编程。在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)


 类似资料:
  • 我一直认为函数和方法是一样的,直到我通过“Swift编程语言”电子书学习Swift。我发现我不能使用调用我在类中声明的函数,如下面屏幕快照中的电子书所示: 我收到一个错误,说“调用中缺少参数标签'day:'”,根据这个屏幕快照: 代码如下:-

  • 问题内容: 情况: 我想从控制台获取密码输入- 而不回显用户键入的内容 。有什么可以和Go中的功能媲美吗? 我试过的 我尝试使用,但它回显了键入的内容。 问题答案: 您可以通过执行以下操作来关闭回显,然后在读取密码后将其重新打开

  • 我使用lambda函数中的functional方法实现了函数接口。所有的工作都很好,只是我遇到了一个错误,即必须实现这个继承的抽象方法(在我的例子中是函数方法)。现在我很困惑。我使用lambda函数实现了这个函数方法,为什么我要再次实现这个方法。函数方法的实现是如何正确完成的?我的代码: 谢谢你的帮助。:)

  • 问题内容: 我正在通过编写一个小型个人项目来学习Go。即使很小,我还是决定从头开始进行严格的单元测试,以学习Go的良好习惯。 琐碎的单元测试都很好而且花哨的,但是我现在对依赖项感到困惑;我希望能够用模拟函数替换一些函数调用。这是我的代码片段: 我希望能够测试downloader()而不实际通过http获取页面- 即通过模拟get_page(更容易使用,因为它仅将页面内容作为字符串返回)或http.

  • 问题内容: 我为go写了一个很小的前置函数。 无论如何,该函数对于任何类型都是通用的? 这样我就可以在数组的前面放置一个前缀。 另外,有没有更好的方法来编写此函数? 我还没有在网上找到关于写一个的任何东西。 问题答案: 我认为您无法以类型通用的方式编写此类函数。但是您也可以使用它作为前缀。 游乐场。

  • 问题内容: 装饰器模式(功能)有很多好处: 当一个方法具有许多正交的关注点时,这将非常有用…也就是说,这些关注点均不相关,除了我们每次调用我们的方法时都希望全部(或部分)关注它们。这是装饰器模式真正有用的地方。 通过实现装饰器模式,我们订阅了开闭主体。我们的方法对将来的扩展开放,但对将来的修改不开放。遵循开放-封闭原则有很多有趣的好处。 但是,我发现的所有示例都非常复杂(例如,编写带有许多中间件的