Можно ограничить максимальное кол-во соединений до 1:
db.SetMaxOpenConns(1)
Это приведет к тому, что и запросы на чтение перестанут выполняться параллельно - так что может подойти, если у вас запросы "шустрые".
Плюс в том, что в коде не надо будет ничего менять, никаких мьютексов.
Но так как у вас мест записи в БД немного, то можно использовать и мьютексы - вряд ли вы что-то упустите.
Если бы мест изменения БД было много, то еще можно рассмотреть вариант обертки над *sql.DB, в которой автоматически использовать мьютекс для всех "подозрительных" методов - например Exec методов (из предположения что в них как правило идет изменение БД) или Query методов, если в запросе есть insert, update или delete.
Вот еще ссылка по теме:
https://stackoverflow.com/questions/35804884/sqlit...