脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - go语言编程之select信道处理示例详解

go语言编程之select信道处理示例详解

2022-09-14 14:10Jeff的技术栈 Golang

这篇文章主要为大家介绍了go语言编程之select信道处理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

select信道处理

注意:有default就不会阻塞

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package main
func main() {
    var chan1 = make(chan int)
    var chan2 = make(chan int)
    select {
    case <-chan1:
        // 如果chan1成功读到数据,则进行该case处理语句
    case chan2:
        // 如果chan2成功读到数据,则进行该case处理语句
    default:
        // 如果上面都没有成功,则进行该case处理语句
    }
}

fibonacci数列监听

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//fibonacci     1 1 2 3 5 8
package main
import (
    "fmt"
)
//ch只写,quit只读
func fibonacci(ch chan<- int, quit <-chan bool) {
    x, y := 1, 1
    for {
        //监听channel数据的流动
        select {
        case ch <- x:
            x, y = y, x+y
        case flag := <-quit:
            fmt.Println("flag = ", flag)
            return
        }
    }
}
func main() {
    ch := make(chan int)    //数字通信
    quit := make(chan bool) //程序是否结束
 
    //消费者,从channel读取内容
    //新建协程
    go func() {
        for i := 0; i < 8; i++ {
            num := <-ch
            fmt.Println(num)
        }
        //可以停止
        quit <- true
    }() //别忘了()
    //生产者,产生数字,写入channel
    fibonacci(ch, quit)
 
}
 
 
1
1
2
3
5
8
13
21
flag =  true

select监听协程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
func main()  {
    //创建一个有缓存的channel
    ch := make(chan int, 0)
    //len(ch)缓冲区剩余数据个数, cap(ch)缓冲区大小
    //新建协程
    go func() {
        for i := 0; i < 10; i++ {
            ch <- i //往chan写内容
        }
    }()
    ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
    go func(ctx context.Context) {
        ticker := time.NewTicker(1 * time.Second)
        for _ = range ticker.C {
            select {
            case <-ctx.Done():
                fmt.Println("child process interrupt...")
                return
            default:
                fmt.Printf("send message: %d\n", <-ch)
            }
        }
    }(ctx)
    defer close(ch)
    defer cancel()
    select {
    case <-ctx.Done():
        time.Sleep(1 * time.Second)
        fmt.Println("main process exit!")
    }
}

以上就是go语言编程之select信道处理示例详解的详细内容,更多关于go语言select信道处理 的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/guyouyin123/p/13986339.html

延伸 · 阅读

精彩推荐
  • Golanggo语言实现字符串base64编码的方法

    go语言实现字符串base64编码的方法

    这篇文章主要介绍了go语言实现字符串base64编码的方法,实例分析了Go语言操作字符串的技巧及base64编码的使用技巧,需要的朋友可以参考下 ...

    令狐不聪5272020-04-24
  • Golanggolang接口IP限流,IP黑名单,IP白名单的实例

    golang接口IP限流,IP黑名单,IP白名单的实例

    这篇文章主要介绍了golang接口IP限流,IP黑名单,IP白名单的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    raoxiaoya10392021-03-13
  • GolangGo语言的IO库那么多纠结该如何选择

    Go语言的IO库那么多纠结该如何选择

    在Go语言中涉及 I/O 操作的内置库有很多种,比如: io 库, os 库, ioutil 库, bufio 库, bytes 库, strings 库等等。拥有这么多内置库是好事,但是具体到涉及...

    Go语言教程网12422021-08-10
  • GolangK8s部署发布Golang应用程序的实现方法

    K8s部署发布Golang应用程序的实现方法

    本文主要介绍了K8s部署发布Golang应用程序的实现方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧...

    luoguo7972021-08-15
  • GolangGo语言实现简单留言板的方法

    Go语言实现简单留言板的方法

    这篇文章主要介绍了Go语言实现简单留言板的方法,涉及数据库、模板页面元素等留言板相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    不吃皮蛋6152020-04-15
  • Golang使用Go添加HTTPS的实现代码示例

    使用Go添加HTTPS的实现代码示例

    这篇文章主要介绍了使用Go添加HTTPS的实现代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    帅气猫咪5972020-05-29
  • GolangGolang 编译成DLL文件的操作

    Golang 编译成DLL文件的操作

    这篇文章主要介绍了Golang 编译成DLL文件的操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    冷月醉雪7532021-06-20
  • GolangGo语言增强版操作MySQL(SQLX)

    Go语言增强版操作MySQL(SQLX)

    上次咱们学习了如何使用Go操作Mysql,并且实现了简单的增删改查。但是相对来说,还有有点复杂的,可能那些大佬也都觉得繁琐叭。就又开发出了增强版查...

    Go语言进阶学习14202021-01-28