Comments 7
Навскидку пара замечаний по коду:
1. Работа с
2. Закрытие соединения и удаление из
1. Работа с
clients не потокобезопасна.2. Закрытие соединения и удаление из
clients — использовать defer:connection, _ := upgrader.Upgrade(w, r, nil)
defer connection.Close()
server.clients[connection] = true // Сохраняем соединение, используя его как ключ
defer delete(server.clients, connection)
спасибо, учту. map был использован, так как суть туториала показать базовую работу с библиотекой, чуть лучше и проще чем в официальной документации, не больше. А насчет defer, это такое требование к код стайлу или все таки вкусовщина?
Просто задаваясь вопросом, как отслеживать все что происходит по окончанию функции, очевидно что посмотреть на все defer. Но как таким образом контролировать, в каком порядке производятся те или иные действия
deferсрабатывают в обратном порядке- Если вы добавите
returnгде-то в середине функции или случитсяpanic, то код вdeferвсё равно отработает - В другом языке можно было бы использовать
try/finally— по сравнению сdeferкод «очистки» находится далеко от кода «создания», а также добавляется дополнительный (дополнительные) уровень вложенности
Мне gobwas/ws больше понравился, хотя может я просто ещё не напоролся на подводные камни.
Я еще использовал nhooyr/websocket
Sign up to leave a comment.
Простейший сервер на Gorilla WebSocket