go:channel(未完)

來源:互聯網
上載者:User

標籤:

注:1)以下的所有討論建立在包含整形元素的通道類型之上,即 chan int

  2)對於“<-”我的理解是,它可能是一個操作符(接收操作符),也

     可能是類型的一部分(如“chan<- int”表示包含整形元素的發送通道類型)

 

帶緩衝和不帶緩衝的channel

1.帶緩衝:ch:=make(chan int,1)

  1)goruntine A 中包含語句 ch<-1:表示向ch發送1,若此時ch中已經有一個資料,則A阻塞在此處,直到ch中的資料被取走;

  2)goruntine A 中包含語句  <-ch:表示從ch中接收一個資料,若此時ch中無資料,則A阻塞在此處,直到有資料傳入ch;  

  3)假設ch:=make(chan int,100),for i := range ch {...}。通過range 在遍曆 ch 的時候需要注意:

      a. range迴圈接收ch,直到close(ch),如果沒有資料,將阻塞在此處。
      b. 當close(ch)運行後,不可向ch發送資料,但仍然可以接收ch剩餘資料,直到ch中資料為空白,這時range語句將結束而非阻塞。
  

2.不帶緩衝:ch:=make(chan int),此時的ch只作資料傳遞的作用,不能儲存資料(因為它沒buffer)。

  1)goruntine A 包含 ch<-1:運行到此處A立即阻塞,除非另一個goruntine B 正在執行 ch<-

    換個說法:A欲向ch發送資料,僅當B做好了從ch接收資料的準備;

  2)同理,goruntine A 包含 <-ch。A欲從ch接收一個資料,僅當B做好了向ch發送資料的準備。

  

類型轉換:一定注意chan int是一個整體

     <-chan int(v):將v轉換為一個通道類型,再從該通道接收一個值(此時“<-”是一個操作符)

  (<-chan int)(v):將v轉換為一個接收通道類型(此時“<-”是類型的一部分)

go:channel(未完)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.