Go язык общего назначения, так что все возможно.
Плюсы его в простоте. Одном бинарнике, то есть все отлично
1) раз мы делаем через WEB, то используем веб-сокеты? Есть ли какие-то еще интересные и практичные варианты для моей цели? Так же, интересует максимальное кол-во игроков? Как я понимаю это 64к человек на сервер? Или же нет?
Я бы рекомендовал UDP. Один порт и все, пробивание файрволов и серых адресов описано.
Кроме того в случае TCP добавляете второй IP и получаете N * 65000
2) Как стоит разделять комнаты? Делать все в одном инстансе или для каждой комнаты свой отдельный? Хранить на одном сервере или для каждой комнаты свой личный?
Все зависит от вашей логики. Я бы посоветовал мастер сервис, который раскидывает игрокам по воркерам и мигрирует с одного инстанса на другой как игрока так и комнату.
3) Если на разных инстансах (или собственно серверах), то как в итоге соединять людей в них? В БД хранить порт комнаты на сервере или как то еще?
В бд хранится общая конфигурация, в редисе текущий кэш для быстрого доступа
4) Как при запуске GOшного инстанса сохранять и манипулировать им? Как указывать игрокам к какому подключаться?
Есть мастер инстанс. Он же сигнальный сервер. Он отдает клиенту мета информацию о количестве серверов, игроках, пинге. Как вы там выберите не понятно, можно дать возможность пользователю выбрать, можно автоматом. В общем это уже архитектура