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)
0
спасибо, учту. map был использован, так как суть туториала показать базовую работу с библиотекой, чуть лучше и проще чем в официальной документации, не больше. А насчет defer, это такое требование к код стайлу или все таки вкусовщина?
0
Просто задаваясь вопросом, как отслеживать все что происходит по окончанию функции, очевидно что посмотреть на все defer. Но как таким образом контролировать, в каком порядке производятся те или иные действия
0
defer
срабатывают в обратном порядке- Если вы добавите
return
где-то в середине функции или случитсяpanic
, то код вdefer
всё равно отработает - В другом языке можно было бы использовать
try/finally
— по сравнению сdefer
код «очистки» находится далеко от кода «создания», а также добавляется дополнительный (дополнительные) уровень вложенности
+1
Мне gobwas/ws больше понравился, хотя может я просто ещё не напоролся на подводные камни.
0
Я еще использовал nhooyr/websocket
0
Sign up to leave a comment.
Простейший сервер на Gorilla WebSocket