Я нашел это в книге Go и не могу найти его в синтаксисе языка. Может кто-нибудь объяснить это? Является ли это по существу «тегом»?Объясните это утверждение Go
return (<-reply).(int)
Я нашел это в книге Go и не могу найти его в синтаксисе языка. Может кто-нибудь объяснить это? Является ли это по существу «тегом»?Объясните это утверждение Go
return (<-reply).(int)
У вас есть три вещи в этом заявлении, которые отличаются друг от друга, и все они работают вместе.
return
возвращает значение из функции<-reply
считывает значение из канала имени ответvar.(type)
утверждает интерфейс содержит этот тип.Поэтому, ставя их вместе, вы читаете значение интерфейса из канала ответа, утверждая, что это значение является целым числом, а затем возвращаете это целочисленное значение.
The Go Programming Language Specification
Для операнда ч канального типа, значение приема операции < -СН это значение, полученное из канала гл. Направление канала должно разрешать операции приема, а тип операции приема - это тип элемента канала. Выражение блокируется до значения . Получение с нулевого канала блокирует навсегда. A операция приема по замкнутому каналу всегда может начинаться немедленно, , давая нулевое значение типа элемента после того, как все ранее отправленные значения были получены.
v1 := <-ch v2 = <-ch f(<-ch) <-strobe // wait until clock pulse and discard received value
Приемный выражение, используемое в назначении или инициализации специальной формы
x, ok = <-ch x, ok := <-ch var x, ok = <-ch
дает дополнительный логический результат нетипизированный отчетности удалось ли связи. Значение ok является истинным, если полученное значение было отправлено успешной передачей на канал или false , если это нулевое значение, сгенерированное, потому что канал закрыт и пуст.
Для выражения х типа интерфейса и типа Т, первичного выражения
x.(T)
утверждает, что х не ноль и что значение, сохраненное в й имеет типа T. Обозначение x. (T) называется утверждением типа.
Если утверждение типа имеет значение, значение выражения представляет собой значение , хранящееся в x, а его тип - T. Если утверждение типа ложно, происходит паника во время выполнения. Другими словами, хотя динамический тип x известен только во время выполнения, тип x. (T) известен как T в правильной программе .
«Возвращение» Заявление в функции F завершает выполнение F, и необязательно содержит одно или несколько значений результата. Любые функции , отложенные F, выполняются до того, как F вернется к своему вызывающему абоненту.
Для return (<-reply).(int)
,
<-reply
принимает значение от канала reply
.
(<-reply).(int)
утверждает, что значение, полученное от канала reply
, относится к типу int
.
return (<-reply).(int)
возвращает значение int
, полученное от канала reply
, и прекращает выполнение функции или метода.