Go学习笔记-管道

来源:互联网 发布:淘宝上给差评有用么 编辑:程序博客网 时间:2024/04/19 16:24

一.管道

功能:实现并发线程之间的通信,可以将值从一个线程传递到另一个线程

用法:

  • 创建: make(chan val-type)
  • 赋初值: channel <- val
  • 传递值: val <- channel

示例代码:

package main import "fmt"func main() {    messages := make(chan string)    go func() { messages <- "ping"}()    msg := <-messages    fmt.Println(msg)}运行输出:$go run channels.go ping

二.管道缓存

功能:缓存管道中的数据,使得一个管道可以传递多个缓存值

用法:

  • 创建: make(chan val-type, num) // num表示缓冲区大小
  • 赋初值: channel <- val
  • 值传递: val <- channel

示例代码:

package main import "fmt"func main() {    messages := make(chan string, 2)    messages <- "buffered"    messages <- "channel"    fmt.Println(<-messages)    fmt.Println(<-messages) }

三.管道同步

功能:通过管道来实现线程之间的同步

用法:

  • 当线程发现管道输出时值为空时便会阻塞线程,直到另一线程有值输入时才会将其唤醒

示例代码

package main import "fmt"import "time"func worker(done chan bool) {    fmt.Print("working...")    time.Sleep(time.Second)    fmt.Println("done")    done <- true}func main() {    done := make(chan bool, 1)    go worker(done)    <-done}//正常输出working...done,当把最后一句<-done去掉后便不再输出

四.管道定向

功能:作为函数参数时指定管道的传输方向

用法:

  • 在定义管道时连同传输方向一起定义

示例代码

package main import "fmt"func ping(pings chan<- string, msg string) {    pings <- msg}func pong(pings <-chan string, pongs chan<- string ) {    msg := <-pings    pongs <- msg}func main() {    pings := make(chan string, 1)    pongs := make(chan string, 1)    ping(pings, "passed message")    pong(pings, pongs)    fmt.Println(<-pongs)}

五.Select选择管道

功能:当有多个因为管道未赋值而被阻塞的情况时,选择最先被响应的那种情况执行

用法

select{    case 阻塞情况:        执行内容    case 阻塞情况:        执行内容    ... }

示例代码

package main import "time"import "fmt"func main() {    c1 := make(chan string)    c2 := make(chan string)    go func(){        time.Sleep(time.Second * 1)        c1 <- "one"    }()    go func(){        time.Sleep(time.Second * 2)        c2 <- "two"    }()    for i := 0; i < 1; i++{        select{            case msg1 := <-c1:                fmt.Println("received", msg1)            case msg2 := <-c2:                fmt.Println("received", msg2)        }    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2月婴儿感冒怎么办 长期流黄鼻涕怎么办 孩子流清水鼻涕怎么办 小孩有点流鼻子怎么办 初生婴儿堵鼻子怎么办? 小孩反复发烧了怎么办 小孩突然发烧了怎么办 40天宝宝鼻塞怎么办 宝宝伤风鼻子不通怎么办 鼻子伤风不通气怎么办 宝宝伤风流鼻子怎么办 十个月婴儿上火怎么办 一个多月宝宝鼻子有鼻屎怎么办 三个月婴儿感冒发烧怎么办 小孩感冒发烧流鼻涕怎么办 小孩感冒发烧反反复复怎么办 宝宝反复发烧39怎么办 一岁婴儿流鼻涕怎么办 四岁宝宝发烧怎么办 小孩流清鼻涕怎么办? 5宝宝光流清鼻涕怎么办 孩子一直流鼻子怎么办 10岁天天流鼻涕怎么办 喉咙痛又痒咳嗽怎么办 60天宝宝流鼻涕怎么办 宝宝流鼻子严重怎么办 鼻炎鼻涕多鼻塞怎么办 夏天老人感冒流鼻涕怎么办 鼻窦炎流清鼻涕怎么办 鼻子有脓鼻涕怎么办 宝宝有脓鼻涕怎么办 小孩脓鼻涕咳嗽怎么办 哺乳期流黄鼻涕怎么办 宝宝鼻塞流脓涕怎么办 喉咙痛浓痰咳嗽怎么办 哺乳期留清鼻涕怎么办 哺乳期就清鼻涕怎么办 小金毛流脓鼻涕怎么办 鼻炎有浓鼻涕怎么办 宝宝流稠鼻涕怎么办 小孩流粘鼻涕怎么办