2016-02-17 55 views
2

我發現這是在Go書中找不到它的語言語法。任何人都可以解釋嗎?它本質上是某種「標籤」嗎?解釋此Go語句

return (<-reply).(int) 

回答

10

在該聲明中,您有三件事情是不同的語言特性,它們都在一起工作。

  • return從函數
  • <-reply返回一個值讀取從信道命名答覆
  • var.(type)值斷言接口包含類型。

因此,把它們放在一起,你從應答通道讀取一個接口值,聲明該值是一個整數,然後返回該整數值。

9

The Go Programming Language Specification

Receive operator

對於信道類型的操作數通道,接收操作 < -ch的值是從信道ch接收到的值。通道方向 必須允許接收操作,並且接收操作的類型 是通道的元素類型。表達式阻塞直到 值可用。從零通道接收永遠阻止。 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的值爲true;如果由於通道關閉而產生零值,並且 爲空,則值爲 。

Type assertions

對於X接口類型的表達式和類型T,主 表達

x.(T)

斷言x不爲零,並且存儲在x中的值的類型的T. 符號x。(T)被稱爲類型斷言。

如果類型聲明成立,則表達式的值是存儲在x中的值 ,並且其類型爲T.如果類型聲明爲false,則會發生運行時混亂。換句話說,即使動態類型 x只在運行時才知道,x。(T)的類型在 正確的程序中已知爲T.

Return statements

「返回」語句在函數F終止樓 的執行,並可選地提供一個或多個結果值。 F推遲的任何函數 在F返回給調用者之前執行。

對於return (<-reply).(int)

<-reply接收來自信道reply的值。

(<-reply).(int)聲稱從通道reply收到的值的類型爲int

return (<-reply).(int)返回從通道reply收到的值int並終止該功能或方法。