当前位置: 首页 > news >正文

苏州专业高端网站建设网络公司wordpress异步加载

苏州专业高端网站建设网络公司,wordpress异步加载,商洛微网站建设,公司标志logo设计图片文章目录一、什么是通道类型二、通道产生的原因三、声明channel四、创建channel五、channel相关操作1、发送值2、接收值3、关闭通道3.1 注意3.2 特点四、通道类型1、无缓冲通道2、有缓冲通道五、单向通道一、什么是通道类型 Go 语言中的通道(channel)是一…

文章目录

  • 一、什么是通道类型
  • 二、通道产生的原因
  • 三、声明channel
  • 四、创建channel
  • 五、channel相关操作
    • 1、发送值
    • 2、接收值
    • 3、关闭通道
      • 3.1 注意
      • 3.2 特点
  • 四、通道类型
    • 1、无缓冲通道
    • 2、有缓冲通道
  • 五、单向通道

一、什么是通道类型

    Go 语言中的通道(channel)是一种特殊的类型。通道像一个传送带或者队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。每一个通道都是一个具体类型的导管,也就是声明channel的时候需要为其指定元素类型。

    如果说goroutine是Go程序并发的执行体,channel就是它们之间的连接。channel是可以让一个goroutine发送特定值到另一个goroutine的通信机制。

二、通道产生的原因

    虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。

    Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。

三、声明channel

语法:


var 变量 chan 元素类型  

例:


var ch1 chan int   // 声明一个传递整型的通道
var ch2 chan bool  // 声明一个传递布尔型的通道
var ch3 chan []int // 声明一个传递int切片的通道   

四、创建channel

语法:


make(chan 元素类型, [缓冲大小])  

注意: 声明的通道后需要使用make函数初始化之后才能使用。channel的缓冲大小是可选的。

例:


ch4 := make(chan int, 3)
ch5 := make(chan bool)
ch6 := make(chan []int)   

五、channel相关操作

1、发送值

将一个值发送到通道中。

例:


ch <- 10 // 把10发送到ch中   

2、接收值

从一个通道中接收值。

例:


x := <- ch // 从ch中接收值并赋值给变量x
<-ch       // 从ch中接收值,忽略结果   

3、关闭通道

例:


close(ch)   

3.1 注意

    只有在通知接收方goroutine所有的数据都发送完毕的时候才需要关闭通道。通道是可以被垃圾回收机制回收的,它和关闭文件是不一样的,在结束操作之后关闭文件是必须要做的,但关闭通道不是必须的。

3.2 特点

  1. 对一个关闭的通道再发送值就会导致panic。
  2. 对一个关闭的通道进行接收会一直获取值直到通道为空。
  3. 对一个关闭的并且没有值的通道执行接收操作会得到对应类型的零值。
  4. 关闭一个已经关闭的通道会导致panic。

四、通道类型

1、无缓冲通道

    无缓冲的通道只有在有人接收值的时候才能发送值。就像你住的小区没有快递柜和代收点,快递员给你打电话必须要把这个物品送到你的手中,简单来说就是无缓冲的通道必须有接收才能发送

在这里插入图片描述
语法:


ch := make(chan type) 

例:


func recv(c chan int) {ret := <-cfmt.Println("接收成功", ret)
}
func main() {ch := make(chan int)go recv(ch) // 启用goroutine从通道接收值ch <- 10fmt.Println("发送成功")
}  

分析: 无缓冲通道上的发送操作会阻塞,直到另一个goroutine在该通道上执行接收操作,这时值才能发送成功,两个goroutine将继续执行。相反,如果接收操作先执行,接收方的goroutine将阻塞,直到另一个goroutine在该通道上发送一个值。

2、有缓冲通道

    只要通道的容量大于零,那么该通道就是有缓冲的通道,通道的容量表示通道中能存放元素的数量。就像你小区的快递柜只有那么个多格子,格子满了就装不下了,就阻塞了,等到别人取走一个快递员就能往里面放一个。

在这里插入图片描述
语法:


ch := make(chan type, [cap]) 

例:


func main() {ch := make(chan int, 1) // 创建一个容量为1的有缓冲区通道ch <- 10fmt.Println("发送成功")
}   

五、单向通道

    有的时候我们会将通道作为参数在多个任务函数间传递,很多时候我们在不同的任务函数中使用通道都会对其进行限制,比如限制通道在函数中只能发送或只能接收。

语法:


chan<- int  是一个只能发送的通道,可以发送但是不能接收;
<-chan int  是一个只能接收的通道,可以接收但是不能发送。

例:


func counter(out chan<- int) {for i := 0; i < 100; i++ {out <- i}close(out)
}func squarer(out chan<- int, in <-chan int) {for i := range in {out <- i * i}close(out)
}
func printer(in <-chan int) {for i := range in {fmt.Println(i)}
}func main() {ch1 := make(chan int)ch2 := make(chan int)go counter(ch1)go squarer(ch2, ch1)printer(ch2)
}     

注意: 在函数传参及任何赋值操作中将双向通道转换为单向通道是可以的,但反过来是不可以的。

http://www.yayakq.cn/news/221036/

相关文章:

  • 网站建设哪家好首选万维科技wordpress在php什么版本
  • 网站 子域名简单的网站设计图
  • 网站备案 前置审批号淘宝seo排名优化软件
  • 坪山网站建设多少钱河南郑州广告公司网站建设
  • 做金融类网站电商app开发公司
  • 网站开发pc和手机端正保建设工程教育网
  • 崇明建设机械网站做外贸网站公司哪家好
  • 中国亚马逊网站建设学校网站开发招标
  • 英语网站源码北京城乡住房建设厅网站
  • 微信网站开发报价表郑州市科协网站
  • 青建设厅官方网站网站登陆口提交网站
  • 全国最大的网站建设公司排名短视频运营公司网站建设
  • 企业专业网站建设哪家好室内设计培训班排行榜学校
  • 深圳戈麦斯网站开发正规的网站建设学习网
  • 用代码做网站宝塔负载100wordpress
  • 三视觉平面设计网单页关键词优化费用
  • 简述营销网站建设包括哪些内容公司品牌推广方案范文
  • 基于django的电子商务网站设计网络平台创建需要多少钱
  • 导航网站php做视频网站要用到的服务器
  • 专业商城网站建设多少钱制作人结局金秀贤和谁在一起了
  • 优质网站建设制作wordpress搞个会员注册
  • 福建省亿力电力建设有限公司网站企业公示信息查询系统 江苏
  • 奥远网站建设流程免费网课
  • 兰西网站建设湖北短视频seo
  • 定制网站 北京建设银行个人查询余额
  • 太原企业网站建设开发公司施工管理事业部沟通协调类面试题
  • 怎么做点击图片进网站朝阳区seo搜索引擎优化介绍
  • 临沂网站建广州餐饮管理有限公司
  • 江西做网站找谁提升学历咨询
  • 网站开发设计师岗位职责纯flash网站欣赏