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

网站模型怎么做的网站设计论文范文大全集

网站模型怎么做的,网站设计论文范文大全集,江西昌宇建设工程公司网站,小程序注册需要费用吗目录 概述实践无缓冲 channel代码结果 缓冲 channel代码结果 channel的关闭特点代码结果range代码结果 select channel代码结果 结束 概述 此篇文章介绍 channel 的用法 无缓冲 channel缓冲 channelchannel的关闭特点range channelselect channel 每一种,配上完整…

目录

  • 概述
  • 实践
    • 无缓冲 channel
      • 代码
      • 结果
    • 缓冲 channel
      • 代码
      • 结果
    • channel的关闭特点
      • 代码
      • 结果
      • range代码
      • 结果
    • select channel
      • 代码
      • 结果
  • 结束

概述

此篇文章介绍 channel 的用法

  • 无缓冲 channel
  • 缓冲 channel
  • channel的关闭特点
  • range channel
  • select channel

每一种,配上完整的代码及相应的测试结果,对关键的部分,配置上图及对应说明。

实践

无缓冲 channel

未分配空间的 channel 具有 阻塞的功能。交互的 goroutine 两都都会阻塞的效果。

无缓充的 channel
在这里插入图片描述
总结如下:

  • 第1步,两个 goroutine 都到达通道,但都没有开始执行发送或接收
  • 第2步,左侧的 goroutine 将手伸进了通道,模拟了向通道发送数据的行为。此时,这个 goroutine 会在通道中被锁住,直道交换完成。
  • 第3步,右侧 goroutine 将手放入通道,模拟了从通道里接收数据。这个 goroutine 一样也会在通道中被锁住,直到交换完成
  • 第4步与第5步,进行交换。并最终,在第6步,两个 goroutine 都将手从通道里拿出来,模拟了被锁住的 goroutine 得到释放。

代码

package mainimport "fmt"func main() {// 定义一个 channel,并没有分配空间c := make(chan int)// 匿名函数go func() {defer fmt.Println("goroutine调用结束...")fmt.Println("goroutine 正在运行...")c <- 666}()num := <-cfmt.Println("num:=", num)fmt.Println("main goroutine 结束。。。")}

结果

执行结果如下:
在这里插入图片描述

缓冲 channel

在这里插入图片描述

  • 第1步,右侧的 goroutine 正在从通道接收一个值
  • 第2步,右侧的这个 goroutine 独立 完成了 接收值 的动作,而左侧的 goroutine 正在发送一个新值至通道里
  • 第3步,左侧的 goroutine 还在向通道发送新值,而右侧的 goroutine 正在从通道接收另外一个值。这两个步骤里的操作既不是同步的,也不会相互阻塞。
  • 第4步,所有的发送和接收都完成,而通道里还有几个值,也有一些空间可以存更多的值。

特点:当 channel 已经满,再向里面写数据,就会阻塞,当 channel 为空时,从里面取数据也会阻塞。

代码

package mainimport ("fmt""time"
)func main() {// 带有缓冲的 channelc := make(chan int, 3)fmt.Println("len(c)= ", len(c), " ,cap(c)=", cap(c))go func() {defer fmt.Println("子goroutine执行结束...")for i := 0; i < 4; i++ {c <- ifmt.Println("子goroutine正在运行,发送的元素=", i, "len(c)= ", len(c), " ,cap(c)=", cap(c))}}()time.Sleep(2 * time.Second)for i := 0; i < 4; i++ {num := <-cfmt.Println("num=", num)}fmt.Println("main 结束...")
}

结果

执行结果如下:
在这里插入图片描述

channel的关闭特点

  • channel 不像文件一样需要经常关闭,只有确实没有任何发送数据了,或者想显式的结束 range 循环之类的,才去关闭 channel
  • 关闭 channel 后,无法向 channel 再发送数据(引发 panic 错误后导致接收立即返回零值)
  • 关闭 channel 后,可以继续从 channel 接收数据
  • 对于 nil channel ,无论收发都会被阻塞

代码

package mainimport "fmt"func main() {c := make(chan int)go func() {for i := 0; i < 5; i++ {c <- i}// close可以关闭一个 channelclose(c)}()for {// ok 如果为true表示channel没有关闭,如果为false表示channel已经关闭if data, ok := <-c; ok {fmt.Println(data)} else {break}}fmt.Println("main finished...")
}

结果

执行结果如下:
在这里插入图片描述

range代码

range 写法,完整代码如下

package mainimport "fmt"func main() {c := make(chan int)go func() {for i := 0; i < 5; i++ {c <- i}// close可以关闭一个 channelclose(c)}()// 可以使用 range 来迭代不断操作 channelfor data := range c {fmt.Println(data)}
}

结果

range-channel 测试结果如下
在这里插入图片描述

select channel

代码

package mainimport "fmt"func main() {c := make(chan int)quit := make(chan int)go func() {for i := 0; i < 5; i++ {fmt.Println(<-c)}// close可以关闭一个 channelquit <- 0}()x, y := 1, 1for {select {case c <- x:// 如果 c 可写,则该 case 会进来x = yy = x + ycase <-quit:fmt.Println("quit")return}}}

结果

在这里插入图片描述

结束

Golang channel的 基本定义及使用 至此结束,如有疑问,欢迎评论区留言。

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

相关文章:

  • 世界上有一个wordpress站点网页界面设计中常用的中英文字体有哪些
  • 长沙商业网站建设公司网站建设价位
  • 颜色选取网站网站建设案例完整代码
  • 天津做企业网站公司深圳赶集同城网站建设
  • 学习网站大全千图app的优势
  • 建设网站有哪几种方式开发一个app需要多少钱?
  • 唐山市路桥建设有限公司网站中山门户网站制作在哪里买
  • 天津网站建设招聘西宁网站建设哪家强
  • 北京市公司网站制作Wordpress标题颜色怎么修改
  • 有没有做粤菜的网站网络设计报告的研究意义
  • 网站建设 佛山大悟网站建设
  • 跨境商城网站制作试用网站开发
  • 做3d效果的网站环球影城客户电话
  • 传统网站建设网页设计模板html代码教程
  • 网站开发技术报告模板会做网站开发 但是不会二次开发
  • 建设网站对公司起什么作用是什么意思平面设计有哪些工作岗位
  • 怎样查别人网站的外链制作二维码免费软件
  • 互联网门户网站是什么企业做网站分哪几种
  • 云南网站设计方案什么源码做有趣的网站
  • 网站建设公司发展理念网站切图规范
  • 建设工程施工合同范本哪个网站wordpress图片转移
  • 做营销网站seo做ppt在哪些网站可以卖钱
  • 织梦网站怎样做子域名外贸客户开发系统
  • 网站开发的形式南宁商城网站推广公司
  • 软件开发工资高吗抖音seo搜索优化
  • 银川网站建设哪家优wordpress跑一亿数据
  • 图片网站怎么做wordpress 显示指定分类
  • 如何做视频网站的广告推广咸宁建设网站
  • 郴州住房和城乡建设部网站wordpress tinymce advanced
  • 企业网站建设方案价格上海专业网站建设报价