Евгений Мамонов, chatId с разных устройств будет одинаковым оно равно id аккаунта. Я не могу понять, если взять пример из вашего прошлого коментария, то как будет происходить переключение между горутинами, как будет определяться, где сейчас идет write или read, чтобы начать обрабатывать данные в другой горутине(сообщенте бругого пользователя)?
Евгений Мамонов, А мне не нужно использовать sync.WaitGroup?
И я правильно понимаю, что при таком подходе: сначала пользователь 1 отправил комманду /start, потом пользователь 2 отправил такую же команду. Для первого пользователя идет создание структуры, и пока выполняется InsertOne(), начинается обработка 2 пользователя, то есть если добавить в начало HandleStart() отправку сообщения, то пока идет запись структуры 1 пользователя, 2 второму отправится сообщение?
Это ведь не будет работать, как я описал, нужно не полностью storage.GetClient().CreateUserDocument(message.Sender.ID) добавлять в горутину, а отдельно строчку с coll.InsertOne()