Назад к вопросам
Middle+
7
Как обмениваться данными между горутинами?
Компании, где спрашивали
МВидео/эльдорадо
Ответ от нейросети
sobes.tech AI
В Go обмен данными между горутинами обычно осуществляется через каналы (channels). Каналы обеспечивают безопасную и синхронизированную передачу данных, позволяя горутинам общаться без использования явных блокировок.
Пример использования канала для передачи данных:
package main
import (
"fmt"
"time"
)
func worker(ch chan string) {
time.Sleep(time.Second)
ch <- "данные от горутины"
}
func main() {
ch := make(chan string)
go worker(ch)
msg := <-ch
fmt.Println(msg)
}
В этом примере главная горутина создает канал ch и запускает worker в отдельной горутине. worker отправляет строку в канал, а главная горутина получает её, синхронизируя обмен.
Кроме каналов, можно использовать другие механизмы, например, общую память с синхронизацией через мьютексы, но каналы считаются более идиоматичным способом в Go.