Что такое оператор "меньше, чем следует за тире" на языке go?
Что такое оператор <-
в языке go? Видели это во многих фрагментах кода, связанных с Go, но в чем смысл этого?
Ответы
Ответ 1
У вас уже есть ответы, но здесь идет.
Подумайте о канале как очереди сообщений.
Если канал находится справа от кнопки со стрелкой влево (<-), это означает, что нужно удалить запись. Сохранение записи в переменной необязательно
e <- q
Если канал находится слева от оператора со стрелкой влево, это означает, что он должен содержать запись.
q <- e
Обратите внимание на "dequeue" (получение) без сохранения в переменной: его можно использовать в небуферизованной очереди для реализации чего-то вроде операции "wait/notify" в Java: одна сопрограмма заблокирована в ожидании деактивации/получить сигнал, затем другой сопроцессор выдает/передает этот сигнал, содержание которого не имеет значения. (поочередно, отправитель может быть заблокирован до тех пор, пока приемник не вытащит сообщение)
Ответ 2
<-
используется более чем в одном месте в спецификации языка:
Типы каналов:
Оператор <-
указывает направление канала, его отправку или получение. Если направление не указано, канал является двунаправленным. Канал может быть ограничен только для отправки или получения только путем преобразования или назначения.
Оператор приема:
Для операнда ch
типа канала значение операции приема <-ch
является значением, полученным от канала ch
. Тип значения - тип элемента канала. Выражение блокируется до тех пор, пока значение не будет доступно. Получение с нулевого канала блокирует навсегда. Получение из закрытого канала всегда выполняется успешно, сразу же возвращая нулевое значение типа элемента.
Отправить отчеты:
Оператор отправки отправляет значение по каналу. Выражение канала должно быть типа канала, а тип значения должен быть присвоен типу элемента канала.
SendStmt = Channel "<-" Expression .
Channel = Expression .
Оператор приема также является фундаментальной частью оператора select
Ответ 3
Оператор приема
Для операнда ch
типа канала значение операции приема <-ch
- это значение, полученное от канала ch
.
Он получает значение из канала. См. http://golang.org/ref/spec#Receive_operator