我絕對(duì)是 Golang 的新手。我正在通過 Tour of Go 學(xué)習(xí),然后用我自己的理解來實(shí)現(xiàn)想法。我在使用 goroutines 時(shí)遇到問題。我創(chuàng)建了一個(gè)無緩沖通道,然后向該通道發(fā)送了一個(gè)字符串。func main() { p := make(chan string) p <- "Hello goroutine" fmt.Println(<-p)}拋出錯(cuò)誤致命錯(cuò)誤:所有 goroutines 都睡著了——死鎖!我明白了,頻道是無緩沖的。(這就是原因。對(duì)吧?)。但是當(dāng)我重構(gòu)p <- "Hello goroutine為一個(gè) goroutine時(shí)func main() { p := make(chan string) go sendHello(p) fmt.Println(<-p)}func sendHello(p chan string) { p <- "Hello goroutine"}它可以正常工作。我讀到在大多數(shù)情況下我們不需要使用帶有映射、切片和通道的指針來修改值。通過具有單獨(dú)緩沖區(qū)的副本傳遞channel p給func sendHello(p chan string)。我仍然無法理解它。
通道緩沖區(qū)在沒有 goroutines 的情況下與傳遞給 goroutines 時(shí)如何在
桃花長(zhǎng)相依
2023-05-15 15:45:59