美文网首页
channel类型

channel类型

作者: 测试探索 | 来源:发表于2020-08-10 06:29 被阅读0次

和map类似,channel也一个对应make创建的底层数据结构的应用

当我们赋值一个channel或用于函数参数传递时,我们只是拷贝了一个channel引用,因此调用者和被调用者尹艳红同一个channel对象,和其它的引用类型一样,channel的零值也是nil

定义一个channel时,也需要定义发送到channel的值的类型。channel可以使用内置的make()函数类创建

make(chan Type) //等价于make(chan Type,0)
make(chan Type,capacity)
//当capacity = 0时,channel是无缓冲阻塞读写的,当capacity>0时,channel有缓冲,是非阻塞的。直到写满capacity个元素才阻塞写入

channel通过操作符<-来接受和发送数据,发送和接收数据的语法

channel <- value    //发送value 到channel
<-channel             //接收并将其丢弃
x := <-channel   //从channel中接收数据,并赋值给x
x.ok := <-channel   //功能同上,同时检查通道是否已关闭或者为空
解决上一篇文章,多任务竞争资源的问题
package main

import (
    "fmt"
    "time"
)

//全局变量,创建一个channel
var ch = make(chan int)

//定义一个打印机,参数为字符串,按每个字符打印
//打印机属于公共资源
func Printer(str string){
    for _,data := range str{
        fmt.Printf("%c",data)
        time.Sleep(time.Second)
    }
    fmt.Printf("\n")
}

//person1执行完后,才能到person2执行
func person1(){
    Printer("hello")
    ch <- 666 //给管道写数据,发送
}

func person2(){
    <-ch  //从管道取数据,如果通道么有数据,会阻塞
    Printer("world")
}
func main(){

    //新建2个协程,代表2个人,2个人同时使用打印机
    go person1()
    go person2()

    //特地不让主协程结束,死循环
    for {

    }
}

#结果
hello
world
image.png

相关文章

  • 理解go channel

    Channel 类型 Channel 最重要的作用就是传递消息。 例子中声明了一个 int 类型的 channel...

  • channel类型

    和map类似,channel也一个对应make创建的底层数据结构的应用 当我们赋值一个channel或用于函数参数...

  • go(三)

    go(三) 数据类型 类型转化 并发 context channel channel主要使用在不同的gorouti...

  • (六)golang channel 源码分析

    基础用法 channel chan T是双向channel类型,编译器允许对双向channel同时进行发送和接收。...

  • golang学习笔记--channel

    go中的channel channel是类型相关的 声明var channame chan chantype 定义...

  • Java-NIO:用Channel代替Stream

    简介 NIO主要组成部分: Channel Buffer Selector Channel有以下类型: FileC...

  • 卷积神经网络attention模块

    attention模块就是加权的思想。 类型:channel加权,spatial空间位置加权。 channel加权...

  • go-并发杂记

    两个相同类型的channel可以使用==运算符比较。一个channel也可以和nil进行比较。 Channel还支...

  • Platform Channel工作原理

    Platform Channel工作原理 Flutter定义了三种不同类型的Channel,它们分别是 Basic...

  • Flutter通信机制——Platform Channel工作原

    Platform Channel工作原理 Flutter定义了三种不同类型的Channel,它们分别是 Basic...

网友评论

      本文标题:channel类型

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