V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hakr
V2EX  ›  问与答

golang 新手求教指针问题

  •  
  •   hakr · 2022-05-06 23:19:42 +08:00 · 1200 次点击
    这是一个创建于 940 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://s1.ax1x.com/2022/05/06/OKTMHx.png

    这里返回的 &c 是 c 的地址, 那这个返回值为什么不定义为 ctx *Context
    12 条回复    2022-05-07 14:42:25 +08:00
    herich
        1
    herich  
       2022-05-06 23:36:05 +08:00
    Context 是一个接口, &c 实现了这个接口,所以返回&c 没问题
    onlytmp
        2
    onlytmp  
       2022-05-06 23:45:33 +08:00
    newCancelCtx 返回的是一个 struct ,Context 是一个 interface ,c 的指针类型实现了 Context
    hakr
        3
    hakr  
    OP
       2022-05-07 00:07:59 +08:00
    @herich #1
    @onlytmp #2
    懂了 原来是 context 接口的那些方法被 c 的指针类型 实现了
    yaott2020
        4
    yaott2020  
       2022-05-07 08:08:53 +08:00 via Android
    Ctx *context 的话是要返回 c 而不是 &c
    acehowxx
        5
    acehowxx  
       2022-05-07 09:11:38 +08:00 via Android
    因为 Context 是接口,所以和 struct 是反着来的。
    hakr
        6
    hakr  
    OP
       2022-05-07 09:15:47 +08:00
    @yaott2020 #4 *Context 不是表示指针类型吗
    hakr
        7
    hakr  
    OP
       2022-05-07 09:17:03 +08:00
    @acehowxx #5 我更懵了 为啥是反着的
    acehowxx
        8
    acehowxx  
       2022-05-07 09:43:16 +08:00 via Android
    @hakr 为了区分 interface 和 struct
    acehowxx
        9
    acehowxx  
       2022-05-07 09:52:10 +08:00 via Android
    @hakr 对于接口参数,默认就是接受的是指针,因为接口无法实例化为一个特定对象,所以就是用这种写法区分接口参数和结构体参数了,可以在 1 编译阶段就发现写没写错。
    acehowxx
        10
    acehowxx  
       2022-05-07 10:06:14 +08:00 via Android
    @hakr 一般的结构体实现接口时候的函数都是用的指针,所以传指针肯定没问题。如果结构体实现接口时候允许传对象那才可以传对象按值来传递,但那种写法很少用,因为传递的是值的副本,以程序员的角度来说一般是不喜欢副本,而都是要个指针想怎么改怎么改的。
    yaott2020
        11
    yaott2020  
       2022-05-07 14:20:41 +08:00 via Android
    @hakr c 不就是 *context 吗
    hakr
        12
    hakr  
    OP
       2022-05-07 14:42:25 +08:00
    @acehowxx #10 了解了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 22:48 · PVG 06:48 · LAX 14:48 · JFK 17:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.