Что такое оператор "меньше, чем следует за тире" на языке go?

Что такое оператор <- в языке go? Видели это во многих фрагментах кода, связанных с Go, но в чем смысл этого?

Ответ 1

У вас уже есть ответы, но здесь идет.

Подумайте о канале как очереди сообщений.

Если канал находится справа от кнопки со стрелкой влево (<-), это означает, что нужно удалить запись. Сохранение записи в переменной необязательно

e <- q

Если канал находится слева от оператора со стрелкой влево, это означает, что он должен содержать запись.

q <- e

Обратите внимание на "dequeue" (получение) без сохранения в переменной: его можно использовать в небуферизованной очереди для реализации чего-то вроде операции "wait/notify" в Java: одна сопрограмма заблокирована в ожидании деактивации/получить сигнал, затем другой сопроцессор выдает/передает этот сигнал, содержание которого не имеет значения. (поочередно, отправитель может быть заблокирован до тех пор, пока приемник не вытащит сообщение)

Ответ 2

<- используется более чем в одном месте в спецификации языка:

Типы каналов:

Оператор <- указывает направление канала, его отправку или получение. Если направление не указано, канал является двунаправленным. Канал может быть ограничен только для отправки или получения только путем преобразования или назначения.

Оператор приема:

Для операнда ch типа канала значение операции приема <-ch является значением, полученным от канала ch. Тип значения - тип элемента канала. Выражение блокируется до тех пор, пока значение не будет доступно. Получение с нулевого канала блокирует навсегда. Получение из закрытого канала всегда выполняется успешно, сразу же возвращая нулевое значение типа элемента.

Отправить отчеты:

Оператор отправки отправляет значение по каналу. Выражение канала должно быть типа канала, а тип значения должен быть присвоен типу элемента канала.

SendStmt = Channel "<-" Expression .
Channel  = Expression .

Оператор приема также является фундаментальной частью оператора select