golang 新手求教指针问题

2022-05-06 23:19:42 +08:00
 hakr
https://s1.ax1x.com/2022/05/06/OKTMHx.png

这里返回的 &c 是 c 的地址, 那这个返回值为什么不定义为 ctx *Context
1276 次点击
所在节点    问与答
12 条回复
herich
2022-05-06 23:36:05 +08:00
Context 是一个接口, &c 实现了这个接口,所以返回&c 没问题
onlytmp
2022-05-06 23:45:33 +08:00
newCancelCtx 返回的是一个 struct ,Context 是一个 interface ,c 的指针类型实现了 Context
hakr
2022-05-07 00:07:59 +08:00
@herich #1
@onlytmp #2
懂了 原来是 context 接口的那些方法被 c 的指针类型 实现了
yaott2020
2022-05-07 08:08:53 +08:00
Ctx *context 的话是要返回 c 而不是 &c
acehowxx
2022-05-07 09:11:38 +08:00
因为 Context 是接口,所以和 struct 是反着来的。
hakr
2022-05-07 09:15:47 +08:00
@yaott2020 #4 *Context 不是表示指针类型吗
hakr
2022-05-07 09:17:03 +08:00
@acehowxx #5 我更懵了 为啥是反着的
acehowxx
2022-05-07 09:43:16 +08:00
@hakr 为了区分 interface 和 struct
acehowxx
2022-05-07 09:52:10 +08:00
@hakr 对于接口参数,默认就是接受的是指针,因为接口无法实例化为一个特定对象,所以就是用这种写法区分接口参数和结构体参数了,可以在 1 编译阶段就发现写没写错。
acehowxx
2022-05-07 10:06:14 +08:00
@hakr 一般的结构体实现接口时候的函数都是用的指针,所以传指针肯定没问题。如果结构体实现接口时候允许传对象那才可以传对象按值来传递,但那种写法很少用,因为传递的是值的副本,以程序员的角度来说一般是不喜欢副本,而都是要个指针想怎么改怎么改的。
yaott2020
2022-05-07 14:20:41 +08:00
@hakr c 不就是 *context 吗
hakr
2022-05-07 14:42:25 +08:00
@acehowxx #10 了解了

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

https://tanronggui.xyz/t/851260

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

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

© 2021 V2EX