Golang之channel操作

无缓冲chan 阻塞等待
无缓冲chan 阻塞等待
有缓冲chan 先读后阻塞
有缓冲chan 先写后阻塞
close的无缓冲chan 读到零值,可通过ok判断
close的无缓冲chan panic
close的有缓冲chan 先读,后读到零值,可通过ok判断
close的有缓冲chan panic
nil的chan 阻塞
nil的chan 阻塞

1、读时:先读、再阻塞等待、同时通过ok判断是否真正取到值(因为有缓冲chan在close后会取到零值);

2、写时:先写,再阻塞等待、写close的chan会panic;

3、nil的chan读写都会阻塞;

4、for range等同于for ok,即:

// for ok
    for {
		item, ok := <-ch
		if ok {
			fmt.Println(item)
		} else {
			break
		}
	}

// for range
	for item := range ch {
		fmt.Println(item)
	}

上一篇:弹窗


下一篇:JDBC工具类