亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超14個贊

這里的問題似乎與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 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號