package demo_channel

import (   "fmt"   "time")

func main() {   //无缓存chan   ch := make(chan int)   go func() {      fmt.Println("执行")      ch <- 99 //一般放在有效代码的最后,这是由于若主线程ch取的太快的话则协程可能执行不完      fmt.Println("执行结束")   }()   a := <-ch //若没有上面的协程则程序会阻塞   time.Sleep(time.Second)   fmt.Println(a, "程序结束")   //死锁,在主线程中向无缓存的channel添加内容或在主线程中向channel添加内容超过channel缓存的个数就会出现死锁   //如:func(){   // ch:=make(chan int)   //ch<-1   // }   //这种情况在子协程中出现不会影响主线程的正常运行   //若有缓存的channel中不超过最大值则不会出现死锁

   //select 简介   ch1 := make(chan int, 1)   ch2 := make(chan string, 1)   ch1 <- 1   ch2 <- "ksdj"   select { //若符合以下条件的不止一个则随机选择一个来执行,若所有条件都不满足也没有default则阻塞   case value := <-ch1:      fmt.Println(value)   case value := <-ch2:      fmt.Println(value)   default:      fmt.Println("skjd")   }

   //若客户端不停地发消息则用如下结构   ch3 := make(chan int)   for i := 0; i < 10; i++ {      go func(j int) {         ch3 <- j      }(i)   }   for {      select {      case aa := <-ch3:         fmt.Println(aa)      default:      }   }}

转载于:https://www.cnblogs.com/chu-12345/p/11368757.html

知识点 channel的使用相关推荐

  1. Netty3之ServerBootstrap分析

    为什么80%的码农都做不了架构师?>>>    概述 ServerBootstrap是Netty提供的一个服务端工具类,通过设置ChanneFactory,ChannelPipeli ...

  2. Go 知识点(08) — 对未初始化的 channel 进行读写操作

    1. 对未初始化的 channel 进行写操作 先看下面代码 func main() {var ch chan int // 只声明,并没有初始化fmt.Printf("ch is %v\n ...

  3. Go 知识点(03)— 非缓冲 channel 的长度始终为 0

    我们先看下面代码输出通道的长度是多少? func main() {ch := make(chan string)go func() {ch <- "hello"close(c ...

  4. Go知识点:slice、map、func、struct、method、interface、channel、goroutine

    slice 动态索引数组,使用make生效 map 关联数组,使用make生效 struct 相当于类的概念  可以引用其他的接口体,是属性的一个集合 method 继承是直接把接口体写在结构体中即可 ...

  5. channel小知识点

    1.传入channel的值是原来值的备份,从channel中取出来的值也是通道中值的备份. 2.如果想通过channel传送同一个值,那么可以传递这个值的指针 3.关闭channel要从发送端关闭,如 ...

  6. Go 知识点(09)— for select 作用于 channel

    1. for select 作用于未关闭的通道 1.1 没有 default 分之场景 先看下面代码 func main() {ch := make(chan int, 3)go func() {ti ...

  7. Go 知识点(02)— channel 使用不当导致的 deadlock

    运行下面这段代码输出的结果是什么? package mainimport ("fmt" )func main() {c := make(chan string) // 创建一个无缓 ...

  8. YOLOV4知识点分析(二)

    YOLOV4知识点分析(二) 数据增强相关-mixup 论文名称:mixup: BEYOND EMPIRICAL RISK MINIMIZATION 论文地址:https://arxiv.org/ab ...

  9. Netty Channel源码分析

    原文:https://wangwei.one/posts/netty-channel-source-analyse.html 前面,我们大致了解了Netty中的几个核心组件.今天我们就来先来介绍Net ...

最新文章

  1. 你想了解的Cookie和Session就在这~
  2. python基础之常用模块
  3. 登录页面test记录
  4. flask mvc模式开发_Flask中文文档-转载
  5. Beta函数与Gamma函数及其与Beta分布的关系
  6. 如何在脱敏数据中使用BERT等预训练模型
  7. ltspice滑动变阻器在哪_NB物理创新课堂|变阻器
  8. 三星on 7刷android7,三星On7(G6100)安卓8.0版官方固件rom刷机包
  9. C++:建立一个被称为sroot()的函数,返回其参数的二次方根。重载sroot()3次,让它返回整数、长整数与双精度的二次方根
  10. java飞机订票系统实例_航空客运订票系统JAVA课程设计
  11. flea-jersey使用之文件上传接入
  12. 马尔克斯写给读者的告别信
  13. UWB,可以应用到生活中的方方面面
  14. 云服务完整删除mysql
  15. Matlab 实现 数值计算方法 二分法
  16. Python入门(第一节课)
  17. 【服务器搭建个人网站】教程二:快速搭建我们服务器 进来看
  18. VS2019添加git源代码管理-增加VS版本 16.10.4的GIT管理
  19. Android攻击方式与安全分析
  20. Unity中自带的第一人称与第三人称视角之间的切换问题

热门文章

  1. Oracle Cursor 游标
  2. 目标跟踪:相关滤波算法MOSSE理解与python实现
  3. 【智能优化算法】基于粒子群结合NSGA2算法求解多目标优化问题附Matlab代码
  4. matlab印刷汉字识别,如何用MATLAB仿真印刷体汉字识别系统?
  5. 大物下第10章熟记内容
  6. android接入微信API相关细节
  7. httpClient源码如何下载呢?
  8. golang mobile 开发移动应用第三方库
  9. trie树之敏感词过滤算法
  10. python制作录屏软件_【Python成长之路】用python制作一款录屏小工具(1)