Я строю простой Slackbot как опыт обучения с Go, и я ударил свою первую загвоздку: я не могу написать сообщение обратно в соединение!Ошибка веб-рассылки на WriteMessage
Вот мой главный FUNC:
func main() {
conn, botId, err := slackInit(os.Getenv("SLACKBOT_TOKEN"))
if err != nil { return }
defer conn.Close()
for {
_, event, err := conn.ReadMessage()
if err != nil {
fmt.Println("Error processing message:", err)
return
}
fmt.Println(string(event))
message, err := slackGetMessage(event)
if strings.Contains(message, botId) {
fmt.Println("Bot was mentioned!")
resp := []byte("You talkin' to me?")
err = conn.WriteMessage(1, resp)
if err != nil {
fmt.Println("Error writing message:", string(resp))
return
}
}
}
}
Это слушает и отчеты события, не имеющие выпуска, но не может, как только метод conn.WriteMessage
называется. Я получаю фатальную ошибку от websocket
с кодом 1006 & сообщение «неожиданное закрытие».
Я использую Gorilla для своей библиотеки websocket, и я подозреваю, что это проблема параллелизма, связанная с лимитом «один читатель, один автор». Я пробовал несколько хитростей, но, честно говоря, просто не знаю достаточно о том, что ягня/библиотека еще не погрузилась глубоко в отладку. : -/
Уверен, что мне не хватает чего-то очевидного здесь! Какие-нибудь советы для управления моим писателем, чтобы мой бот говорил? Благодаря!
В этом примере нет параллельного доступа к соединению. Параллелизм не является проблемой. Запустите с помощью [расы детектор] (https://golang.org/doc/articles/race_detector.html), если вы не уверены. Ошибка указывает на то, что сверстник закрыл соединение без закрытого рукопожатия. Возможно ли, что пэру не понравилось отправленное сообщение? (Теперь я успокаиваюсь). –
Будучи любопытным в Slack, я искал API и вижу, что он использует JSON для сообщений. Случайная догадка заключается в том, что Slack закрыл соединение, потому что приложение отправило недопустимый JSON (строка 'You talkin 'для меня?'). –
Я не знал о детекторе гонки - я скоро проверю это и отчитаю. Очень возможно, что мой ответ искажен, я не считал это. Спасибо! – Alex