登录
首页 >  Golang >  Go问答

为什么需要通过添加中间变量来调用服务器方法,而不能直接调用?

来源:stackoverflow

时间:2024-02-10 08:13:30 415浏览 收藏

今天golang学习网给大家带来了《为什么需要通过添加中间变量来调用服务器方法,而不能直接调用?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我正在为 mqtt 编写一个客户端。 我为 mqtt.OnConnectHandler 编写了一个回调。 我想写打印服务器的连接地址。

var connectHandler mqtt.OnConnectHandler = func(c mqtt.Client) {
    
        // this is ok 
    options := c.OptionsReader()
    s := options.Servers()
        fmt.Printf("conn: %s success\n", s)

        // --------------------------------------
        // But it won't work like this
        // here have error: On servers。
        // cannot call pointer method Servers on mqtt.ClientOptionsReadercompilerInvalidMethodExpr

    o := c.OptionsReader().Servers()    
    fmt.Printf("conn: %s success\n", o)


}

所以,我发现我不能直接使用它。为什么? 它们不是同一个东西吗? 为什么只能用中间变量来接收?

我尝试了两种方法。 成功只有一次。 我以为两者都可以。


正确答案


这是因为 Servers 方法是用指针接收器声明的。这意味着为了调用 Servers,接收者必须是可寻址的:

https://go.dev/ref/spec#Address_operators

临时变量不可寻址。这里:

c.OptionsReader().Servers()

c.OptionsReader() 返回一个不可寻址的值,因此您无法使用该值作为接收者来调用 Servers。当您将 c.OptionsReader 的返回值分配给一个变量时,它就变得可寻址,并且您可以使用该变量调用 Servers()

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《为什么需要通过添加中间变量来调用服务器方法,而不能直接调用?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>