Мьютексы, сокращение от взаимного исключения, используются в Go для синхронизации доступа к общим ресурсам, таким как память или файлы. Они позволяют только одной Goroutine одновременно получить доступ к критической секции кода, предотвращая одновременный доступ и изменение общих ресурсов несколькими Goroutine. В Go мьютексы реализуются с помощью пакета sync, который предоставляет тип Mutex для взаимного исключения. Чтобы использовать мьютекс, мы сначала создаем экземпляр Mutex, а затем используем его методы Lock() и Unlock() для блокировки и разблокировки критического участка кода соответственно. Вот пример использования мьютекса в Go: В этом примере мы определяем структуру Counter, которая содержит целочисленное значение и мьютекс. Метод Increment() в Counter блокирует мьютекс с помощью c.mu.Lock(), увеличивает значение, а затем разблокирует мьютекс с помощью defer c.mu.Unlock(). Аналогично, метод Value() блокирует мьютекс, возвращает значение и разблокирует мьютекс. В функции main()