您的
ListenToConnection()方法有一个参数:
connection Connection。
调用此
ListenToConnection()方法时(未发布此代码),您传递了值
Connection。Go中的所有内容都是按值传递的,因此将复制所传递的值。在内部
ListenToConnection()使用此副本进行操作。您调用其
activateConn()方法,但是该方法(具有指针接收器)将接收此副本的地址(局部变量)。
解决方法很简单,将参数更改
ListenToConnection()为指针:
func (bot *Bot) ListenToConnection(connection *Connection) { // ...}用的值调用它
Bot.connlist:
bot.ListenToConnection(&bot.connlist[0])
一
for环带的每一个元素调用它
conlist:
for i := range bot.connlist { bot.ListenToConnection(&bot.conlist[i])}注意! 我故意使用
for ... range仅使用索引而不使用值的a。使用
for ...range带索引和值(或仅带值)的with,您将观察到相同的问题(
connactive将仍然存在
false):
for _, v := range bot.connlist { bot.ListenToConnection(&v) // BAD! v is also a copy}因为
v它也是一个副本,将其地址传递给
bot.ListenToConnection(),所以它只会指向副本,而不是
connlist切片中的元素。



