golang chan是否关闭
Dec 13, 2019 am 11:45 AMchan是golang中非常重要的一个东西,用来做goroutine的通信,因为golang程序必然会有多个goroutine,如何同步这些goroutine就很重要了。
使用chan时有几个心得: (推荐学习:go)
首先,永远是符号<-进行读取或者写入,譬如v,ok := <-c是读取,而c <- v是写入。
其次,读取时,如果没有ok,也是可以读取的。不过如果closed也是能读的,没有赋值而已;如果要知道是否closed得加ok,也就是除非chan永远不关闭,否则读取应该用v,ok := <-c而不是用v := <-c的方式。
再次,不能向closed的chan写入,所以一般写入时需要用一个信号的chan(一般buffer为1),来判断是否写入或者放弃,用select判断是写入成功了,还是正在关闭需要放弃写入。
最后,如果closed后,chan有数据,ok还是true的,直到chan没有数据了才false。
当一个chanel被关闭后,再取出不会阻塞,而是返回零值
package main import "fmt" func main() { c := make(chan int, 5) c <- 123 close(c) fmt.Println(<-c) fmt.Println(<-c) }
输出
123 0
Atas ialah kandungan terperinci golang chan是否关闭. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana untuk mengkonfigurasi kolam sambungan untuk sambungan pangkalan data Golang?

Bagaimana untuk membaca dan menulis fail dengan selamat menggunakan Golang?

Persamaan dan Perbezaan antara Golang dan C++

Seberapa curam keluk pembelajaran seni bina rangka kerja golang?

Bagaimana untuk menjana elemen rawak dari senarai di Golang?

Perbandingan kebaikan dan keburukan rangka kerja golang

Apakah amalan terbaik untuk pengendalian ralat dalam rangka kerja Golang?

arahan penggunaan dokumen rangka kerja golang
