首页 > 解决方案 > 调用的语法 (object).function 是什么?它是如何在引擎盖下工作的?

问题描述

我偶然发现了一些有用的东西,但我不知道该怎么称呼它。我无法在博客或文档中看到任何使用它的示例(可能是因为我不知道谷歌的正确术语)。无论如何,这是一个代码片段,显示了我的意思。

client := &http.Client{}
clientGet := (*client).Get

// this works, and is calling the Get function on the client object. but how?
resp, err := clientGet(client, "http://google.com")

它几乎看起来像一个类型别名,但我不确定它吗?另外,这在引擎盖下是如何工作的?是否使用反射来调用 Get 函数,因此性能不如简单调用client.Get

标签: go

解决方案


clientGet := (*client).Get表达式产生一个方法值,正如评论中已经提到的,导致后续表达式无法clientGet(client, "http://google.com")编译(参数太多)。

也许您打算使用clientGet := (*http.Client).Get表达式,它被称为方法表达式,它产生一个函数:

... 可作为常规函数调用,其参数与 Get 相同,前缀为方法接收者的附加参数,即 *http.Client。

适合上下文的报价

然后使用该函数,后续表达式clientGet(client, "http://google.com")编译不会出错。

你可以在这里看到编译器错误:https: //play.golang.org/p/KPmGinhMO-Y


推荐阅读