Golang 语法问题

2016 年 11 月 9 日
 GjriFeu

func (c *Client) Do(req *Request) (resp *Response, err error)

( c *Client )加在这里是什么意思啊 // net/http 包中的方法 初学 Go ,望各位指导

3687 次点击
所在节点    程序员
18 条回复
JoshuaJin
2016 年 11 月 9 日
函数定义类型, 即这个函数是定义在某个类型上的。如你举的这个例子,可以使用如下代码调用这个函数:
var c *Client
.......
c.Do(req, resp)
goophy
2016 年 11 月 9 日
Do 是 *Client 实例的方法。
```golang
c := new(Client)
//or
c := &Client{}

c.Do(...)
```
demonchang
2016 年 11 月 9 日
kiwi95
2016 年 11 月 9 日
这就是 golang 的 receiver 啊,为类型定义方法,或者说绑定方法 https://tour.golang.org/methods/3
GjriFeu
2016 年 11 月 9 日
@JoshuaJin
@goophy
奥懂了谢谢
jerray
2016 年 11 月 9 日
我觉得写成这样你就明白了:

```golang
func Do(c *Client, req *Request) (resp *Response, err error)
```
GjriFeu
2016 年 11 月 9 日
@kiwi95 这个解释满分
GjriFeu
2016 年 11 月 9 日
@jerray 像 C++的 this 指针么。。
palmers
2016 年 11 月 9 日
golang 的语法好新奇呀
GjriFeu
2016 年 11 月 9 日
@palmers 看着有点别扭
pathletboy
2016 年 11 月 9 日
@GjriFeu 从 c++角度看,本质就是 this 指针,可以自定义名。
palmers
2016 年 11 月 9 日
@GjriFeu 恩恩 尤其是从 javascript java python 这些语言的角度看 真的很别扭
janxin
2016 年 11 月 9 日
@palmers golamg 没有类
maomaomao001
2016 年 11 月 9 日
这写法~~怎么感觉比 C 还难
mingyun
2016 年 11 月 9 日
初学 golang 也感觉这语言好怪异
bluefalconjun
2016 年 11 月 10 日
这是 method 扩展可以加入 Interface
这部分虽然有点绕... 但是很有用啊
beiping96
2016 年 11 月 10 日
GjriFeu
2016 年 11 月 14 日
up.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/319280

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX