美文网首页Golang语言知识库
知识分享之Golang——在Golang中管道(channel)

知识分享之Golang——在Golang中管道(channel)

作者: cn華少 | 来源:发表于2022-05-31 20:58 被阅读0次

    知识分享之Golang——在Golang中管道(channel)的使用

    背景

    知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。

    知识分享系列目前包含Java、Golang、Linux、Docker等等。

    开发环境

    • 系统:windows10
    • 语言:Golang
    • golang版本:1.18

    内容

    本节我们分享在Golang中管道(channel)的使用,在使用管道时我们需要注意:先进先出原则。
    以下是其相关代码和使用说明(代码中的注释)

    package main
    
    import "fmt"
    
    func main() {
        // 声明一个管道
        var ch chan int
        // 初始化这个管道,让其可以存储10个,注意这里我们可以不给长度,但是由于main主协程会触发死锁,因此有条件时最好增加上去,或者获取的逻辑和写入的逻辑中间有等待
        ch = make(chan int, 10)
        // 向管道中增加10个值
        for i := 0; i < 10; i++ {
            ch <- i
        }
        // 循环打印出来
        for {
            // c是接受对象,ok是本次读取的装填,当管道中没有值了或管道关闭了,这时就会返回false
            c, ok := <-ch
            if ok {
                fmt.Println(c)
            } else {
                break
            }
        }
        // 关闭管道
        close(ch)
    }
    

    打印:

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    

    是不是很简单,当然这个管道配合Golang中的协程,使用起来我们就可以实现各种各样的高并发、队列机制等功能了。

    注意:管道本身带有阻塞功能,当我们读取一个空管道时会出现阻塞情况,这时只有这个管道出现数据时才会向下执行。

    本文声明:
    88x31.png
    知识共享许可协议
    本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

    相关文章

      网友评论

        本文标题:知识分享之Golang——在Golang中管道(channel)

        本文链接:https://www.haomeiwen.com/subject/jewzprtx.html