为了账号安全,请及时绑定邮箱和手机立即绑定

go 中的结构和使用指针

go 中的结构和使用指针

Go
jeck猫 2021-12-20 09:44:11
我正在尝试我的第一个 go 程序,它应该是一个非常简单的 IRC 机器人。我已经完成了部分连接等,但我对结构和指针等感到困惑。这些结构对我来说是来自使用类的语言的新手。我有这个结构和它的构造函数:type Bot struct {    server  string    port    string    nick    string    channel string    pass    string    conn    net.Conn}// NewBot main configfunc NewBot() *Bot {    return &Bot{        server:  "irc.twitch.tv",        port:    "6667",        nick:    "username",        channel: "#channel",        pass:    "password123",        conn:    nil,    }}我的 connect() 方法看起来像这样func (bot *Bot) Connect() (conn net.Conn, err error) {    ircbot := NewBot()    conn, err = net.Dial("tcp", bot.server+":"+bot.port)    // irc connection...    return bot.conn, nil}一切正常,我遇到的问题是使用另一种方法到我的名为 Message 的结构中。它只是应该发送消息。看起来像这样:// Message to send a messagefunc (bot *Bot) Message(message string) {    if message == "" {        return    }    fmt.Printf("Bot: " + message + "\n")    fmt.Fprintf(bot.conn, "PRIVMSG "+bot.channel+" :"+message+"\r\n")}每次当我尝试使用此功能时,我都会收到此错误并且程序崩溃panic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x20 pc=0x463d73]我不确定如何正确使用 & 和 * 符号来实现我想要做的事情。我认为 goroutine 是用于多线程的,通过说“go [do something]”来完成,但我不会在任何地方使用它。
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

这里的问题似乎与Connect方法有关,而不是真正与指针有关:


func (bot *Bot) Connect() (conn net.Conn, err error) {

    ircbot := NewBot()

    conn, err = net.Dial("tcp", bot.server+":"+bot.port)

    // irc connection...

    return bot.conn, nil

}

该方法被定义为在(指向)Bot 结构体上,但它Bot在这一行上创建了一个新的, :


ircbot := NewBot()

然后继续使用定义方法的那个(称为bot,不是ircbot)。如果您选择保留它以便有单独的NewBot和Connect功能(这很好),那么您应该更改它以便Connect实际使用实例化*Bot:


func (bot *Bot) Connect() (conn net.Conn, err error) {

    conn, err = net.Dial("tcp", bot.server+":"+bot.port)

    // irc connection...

    return bot.conn, nil

}

并用这样的东西调用它:


bot := NewBot()

conn, err := bot.Connect()

错误,


panic: runtime error: invalid memory address or nil pointer dereference

可能是因为您正在访问bot该Connect方法(例如 in bot.server)但它尚未定义,并且指针为零。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信