亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

返回兩個通道的 GoRoutine

返回兩個通道的 GoRoutine

Go
鴻蒙傳說 2023-06-01 10:02:59
有人可以幫我理解如何解釋函數返回中的以下代碼行 - (_, _ <-chan interface{})我知道該函數返回兩個通道。但是我不明白它是如何使用以下(_,_ <-chan interface{})實現的。如果我只是將它換成 (<-chan interface{}, <-chan interface{}) 有什么區別?tee := func(    done <-chan interface{},    in <-chan interface{},) (_, _ <-chan interface{}) {    out1 := make(chan interface{})    out2 := make(chan interface{})    go func() {        defer close(out1)        defer close(out2)        for val := range orDone(done, in) {            var out1, out2 = out1, out2            for i := 0; i < 2; i++ {                select {                case <-done:                case out1 <- val:                    out1 = nil                case out2 <- val:                    out2 = nil                }            }        }    }()    return out1, out2}`
查看完整描述

2 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

(_, _ <-chan interface{})相當于(<-chan interface{}, <-chan interface{}). 除了源代碼長度和可讀性之外,沒有區別。

  1. (<-chan interface{}, <-chan interface{})我們從返回值類型開始。

  2. 由于返回值可以有名稱,因此可以寫入(ch1 <-chan interface{}, ch2 <-chan interface{})返回相同的 2 個通道。

  3. 具有相同類型的參數序列(或返回值)可以省略除最后一個變量之外的所有變量的類型。因此我們的返回類型變成:(ch1, ch2 <-chan interface{})

  4. 因為我們真的不需要返回值的名稱,我們可以用下劃線替換名稱,再次使它們匿名:(_, _ <-chan interface{})

瞧!同一類型的可讀通道對。


查看完整回答
反對 回復 2023-06-01
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

這是func聲明


FunctionType   = "func" Signature .

Signature      = Parameters [ Result ] .

Result         = Parameters | Type .

Parameters     = "(" [ ParameterList [ "," ] ] ")" .

ParameterList  = ParameterDecl { "," ParameterDecl } .

ParameterDecl  = [ IdentifierList ] [ "..." ] Type .

如您所見, theResult就像方法的參數 a Parameters,后者又歸結為IdentifierList. 出現了空白標識符_,可以替換IdentifierList.


原作者將此與“聲明為同一類型的多個標識符”語法一起使用,以產生 - 正如已經提到的 - 一種奇怪的閱讀聲明,其中包含兩個相同類型的返回值。


請參閱https://golang.org/ref/spec#Function_declarations


您還可以通過使用空白標識符來實現“刪除”參數的功能。當您不需要您實現的接口的參數時,可能會派上用場。


func foo(a string, _ int, b string) { ... }

第二個參數不可用。


查看完整回答
反對 回復 2023-06-01
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號