構造体に問題があり、私の推測が正しい場合はポインタに関する問題があります。別の構造体のメソッドの内部で構造体の値を変更するGolang
type Bot struct {
// ...
connlist []Connection
}
このConnection
は次のようになります:
type Connection struct {
conn net.Conn
messages int32
channels []string
joins int32
connactive bool
}
私の問題はtrue
にconnactive
の値を変更している
この構造体にはいくつかのフィールドやスライスを保持するフィールドがあります。
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
を持って変更された接続のコピーまたは元の接続のように働いていないと思います。
アイデア?助けてくれてありがとう。
ありがとうございます!これは私にポインタをもっと良く理解させました。ループの追加は非常に便利です。 – gempir
bot.ListenToConnection(&bot.connlist [0])---私のためにちょっと醜いようです – Uvelichitel