golang 新手求教指针问题

2022 年 5 月 6 日
 hakr
https://s1.ax1x.com/2022/05/06/OKTMHx.png

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

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

https://study.congcong.us/t/851260

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

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

© 2021 V2EX