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

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

“<-chan”和“chan”作為函數返回類型有什么區別?

“<-chan”和“chan”作為函數返回類型有什么區別?

Go
陪伴而非守候 2021-11-01 10:44:18
Golang新手在這里。兩者之間是否存在功能差異func randomNumberGenerator() <-chan int {和func randomNumberGenerator() chan int {我試過同時使用兩者,它們似乎對我來說效果很好。我在 Google IO 2012 的 Go Concurrency Patterns 演講中看到 Rob Pike(Go 的創造者之一)使用的前者。我也在 Go 的官方網站上看到了它。當您可以省略它時,為什么要添加 2 個額外的字符(“<-”)?我試過在網上尋找差異,但找不到。
查看完整描述

2 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

兩者確實會起作用。但一個會受到更多限制。箭頭指向遠離chan關鍵字的形式意味著返回的通道只能由客戶端代碼拉出。不允許推送:推送將由隨機數生成器函數完成。相反,還有第三種形式,箭頭指向chan,使所述通道對客戶端只寫。


chan   // read-write

<-chan // read only

chan<- // write only

這些添加的約束可以改進意圖的表達并收緊類型系統:嘗試將內容強制放入只讀通道會導致編譯錯誤,嘗試從只寫通道讀取也會如此。這些約束可以在返回類型中表達,但它們也可以是參數簽名的一部分。像 :


func log(<-chan string) { ...

在那里,您可以僅通過簽名知道該log函數將使用來自通道的數據,而不會向其發送任何數據。


查看完整回答
反對 回復 2021-11-01
?
達令說

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

這是僅接收通道的示例。

可選<-運算符指定通道方向,發送或接收。如果沒有給出方向,則通道是雙向的。通道可能被限制為只能發送或只能通過轉換或分配接收。

告訴 API 的用戶他們應該只從那個頻道接收而不發送是很有用的,否則會發生不好的事情。在公共 API 中指定通道的方向被認為是一種很好的做法。

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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