Здравствуйте. Прошу дать пример или хорошую доступную информацию какмне сделать горутинобезопасное обращение к mysql. Будет база данных mysql. В базе будут юзеры со своими данными. В процессе работы программы данные могут меняться, читаться, записываться. И это может происходить одновременно рахными горутинами. Как мне построить обращение к mysql.
*sql.DB (и производные типы, использующие его под капотом, например *gorm.DB) уже потокобезопасны. Главное открыть подключение 1 раз в процессе инициализации приложения и его можно переиспользовать во всех горутинах.
The returned DB is safe for concurrent use by multiple goroutines and maintains its own pool of idle connections. Thus, the Open function should be called just once. It is rarely necessary to close a DB.
Muxauko, хм, понятно. Это вопрос не к драйверу, или языку, а к тому как вы с SQL работаете. Используйте блокировку на строках которые меняете, используйте транзакции для атомарных изменений. Вариантов решения много - они будут зависеть от вашей бизнес-логики.
Muxauko, нет, блокировки нужны на уровне БД с применением транзакций.
Чтобы что-то еще сказать, хорошо бы указать какие операции с базой асинхронно не работают (один простой UPDATE может выполняться без последствий), какой движок БД используется (так как InnoDB уже по умолчанию все запросы выполняет транзакционно), в какую ошибку вываливается. Там один UPDATE или ещё какие-то запросы?