select

简介:
复制代码
package main

/*
Channel

Channel 是 goroutine 沟通的桥梁, goroutine是通过通信来进行内存的共享,
而不是通过内存的共享来进行通信,通过Channel通道来共享内存,
通过通道的通信(写进去在读出来)进行数据的传递,大都是阻塞同步的
通过 make 创建,close 关闭
Channel 是引用类型
可以使用 for range 来迭代不断操作 channel
可以设置单向(只读或者只写)或双向通道(读写)
可以设置缓存大小,不设置就是0是阻塞的,在未被填满前不会发生阻塞,
有缓存是异步的无缓存是同步的,

Select

可处理一个或多个 channel 的发送与接收
同时有多个可用的 channel时按随机顺序处理
可用空的 select 来阻塞 main 函数
*/
import (
    "fmt"
)

func main1() {
    c := make(chan int)
    go func() { //不断从c读值
        for v := range c {
            fmt.Println(v)
        }
    }()

    for {
        select { //随机向c中写0或者1
        case c <- 0:
        case c <- 1:
        }
    }

}

func main() {
    c := make(chan int)
    go func() { //不断从c读值
        for v := range c {
            fmt.Println(v)
        }
    }()

    for {
        select {} //空的select,没有发送和接收,完全阻塞main函数,
    }

}

/*
    c1: 1
    c2: c2
    c1: 3
    c2: c22
*/
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/8082901.html,如需转载请自行联系原作者

相关文章
|
4月前
|
SQL 数据库
SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY
SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下:
54 1
|
7月前
|
索引
不推荐SELECT * FROM table原因
根据非索引查询 :B+树的叶子节点放数据表行数据,叶子节点存放主键,如果想获得行数据信息,则需要再跑到主键索引去拿数据,这叫回表,速度慢。但不管是主键还是非主键索引,他们的叶子结点数据都是有序的。比如在主键索引中,这些数据是根据主键id的大小,从小到大,进行排序的。**1.**根据索引查询 :B+树的父节点放索引数据,速度快,叶子(父)节点会存放完整的行数据西信息。
347 0
|
9月前
|
SQL 数据库
INSERT DESC UPDATE SELECT
INSERT DESC UPDATE SELECT
68 0
|
7月前
|
数据库 OceanBase
INSERT INTO table_name SELECT * FROM table_name
INSERT INTO table_name SELECT * FROM table_name
37 1
|
8月前
|
数据库 索引
SELECT
SELECT
45 0
|
10月前
|
存储 前端开发 JavaScript
select2 使用详解
select2 使用详解
|
关系型数据库 MySQL 开发者
explain 之 select-type 和 table 介绍|学习笔记
快速学习 explain 之 select-type 和 table 介绍
727 0
|
SQL
表复制:SELECT INTO 和 INSERT INTO SELECT
表复制:SELECT INTO 和 INSERT INTO SELECT
137 0
|
存储 SQL 缓存
到底为什么不建议使用SELECT *?
“不要使用SELECT *”几乎已经成为了MySQL使用的一条金科玉律,就连《阿里Java开发手册》也明确表示不得使用`*`作为查询的字段列表,本文从4个方面给出理由。
到底为什么不建议使用SELECT *?