【发布时间】:2016-07-30 18:23:30
【问题描述】:
如果我的猜测是正确的,我的结构和指针可能有问题。
这个结构有一些字段和一个保存切片的字段:
type Bot struct {
// ...
connlist []Connection
}
这个Connection 看起来像这样:
type Connection struct {
conn net.Conn
messages int32
channels []string
joins int32
connactive bool
}
我的问题是将connactive 的值更改为true。
Bot 有一个监听连接的方法:
func (bot *Bot) ListenToConnection(connection Connection) {
reader := bufio.NewReader(connection.conn)
tp := textproto.NewReader(reader)
for {
line, err := tp.ReadLine()
if err != nil {
log.Printf("Error reading from chat connection: %s", err)
break // break loop on errors
}
if strings.Contains(line, "tmi.twitch.tv 001") {
connection.activateConn()
}
if strings.Contains(line, "PING ") {
fmt.Fprintf(connection.conn, "PONG tmi.twitch.tv\r\n")
}
fmt.Fprintf(bot.inconn, line+"\r\n")
}
}
而connection.activeConn() 是无法正常工作的部分,该方法如下所示:
func (connection *Connection) activateConn() {
connection.connactive = true
}
这实际上是被执行的,所以这不是连接没有得到响应之类的问题。
但是如果我稍后尝试在 Bot 的方法中循环遍历它,由于某种原因(这是默认值),connactive 始终是 false。
for i := 0; i < len(bot.connlist); i++ {
log.Println(bot.connlist[i].connactive)
}
我认为我正在使用原始连接的副本左右,而不是具有connactive = true 的更改连接。
有什么想法吗?感谢您的帮助。
【问题讨论】: