第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Golang - 在結(jié)構(gòu)中使用 chan 切片

Golang - 在結(jié)構(gòu)中使用 chan 切片

Go
溫溫醬 2021-06-27 16:12:19
我正在嘗試在結(jié)構(gòu)中使用 slice chan 類型,類似于下面的代碼。但是,當我嘗試在test := <-c.slice程序掛了。有沒有辦法做到這一點?package mainimport "fmt"type blah struct {    slice chan [][]int}func main() {    slice := make([][]int, 3)    c := blah{make(chan [][]int)}    slice[0] = []int{1, 2, 3}    slice[1] = []int{4, 5, 6}    slice[2] = []int{7, 8, 9}    go func() {        test := <- c.slice        test = slice        c.slice <- test    }()    fmt.Println(<-c.slice)}
查看完整描述

1 回答

?
弒天下

TA貢獻1818條經(jīng)驗 獲得超8個贊

goroutine 中的第一行從通道接收,在創(chuàng)建 goroutine 后 main 中的第一行也是如此。這意味著系統(tǒng)中僅有的兩個 goroutine 都試圖從切片通道接收,并且沒有人試圖向其中發(fā)送。


更一般地說,問題是對于某人接收(消費),其他人必須同時發(fā)送(生產(chǎn))。如果通道被緩沖(在您的示例中并非如此),則發(fā)送也可能在同一個 goroutine 中提前發(fā)生。


所以這是有效的,例如,因為通道有一個元素的緩沖區(qū),這意味著發(fā)送不會阻塞:


ch := make(chan int, 1)

ch <- 1

i := <-ch

這也有效,因為發(fā)送與接收同時發(fā)生:


ch := make(chan int)

go func() { ch <- 1 }()

i := <-ch

這并沒有工作,因為這兩個夠程要發(fā)送到的緩沖通道,沒有人試圖獲得:


ch := make(chan int)

go func() { ch <- 1 }()

ch <- 2

這并沒有任何工作,因為兩者都夠程嘗試接收,沒有人試圖發(fā)送:


ch := make(chan int)

go func() { <-ch }()

<-ch

最后一個是你的情況。


查看完整回答
反對 回復(fù) 2021-06-28
  • 1 回答
  • 0 關(guān)注
  • 403 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號