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

中能建西北城市建设门户网站百度推广介绍

中能建西北城市建设门户网站,百度推广介绍,本地wordpress数据,wordpress自动采集翻译通过反映的方式执行 select 语句。这在处理有很多 case 子句,尤其是不定长 case 子句的情况时非常有用。 1. 使用反射操作 select 和 channel 使用 select 语句可以处理 chan 的 send 和 recv, send 和 recv 都可以作为 case 子句。如果需要同时处理两个 chan, 则可以写成下面…

        通过反映的方式执行 select 语句。这在处理有很多 case 子句,尤其是不定长 case 子句的情况时非常有用。

1. 使用反射操作 select 和 channel

        使用 select 语句可以处理 chan 的 send 和 recv, send 和 recv 都可以作为 case 子句。如果需要同时处理两个 chan, 则可以写成下面的样子:

select {case v:= <-ch1:fmt.Println(v)case v := <-ch2:fmt.Println(v)
}

或者,一个 chan 用于发送,另一个 chan 用地接收:

select {case v:= <-ch1:fmt.Println(v)case v -> ch2:fmt.Println(v)
}

         如果需要处理三个 chan,则可以再添加一个 case 子句,用它来处理第三个 chan; 如果需要处理四个 chan, 那么就再添加一个 case 子句。可是,如果要处理 100 个 chan、1000 个 chan 呢?

        或者,chan 的数量在编译时是不定的,在运行时需要处理一组 channel 时,也没有办法在代码中写成 select 语句。那该怎么办?

        这个时候,就要 “祭” 出反射大法了。

        通过 reflect.Select 函数,可以传入一组运行时的 case 子句,当作参数执行。Go 的 select 是伪随机的,它可以在执行的 case 中随机选择一个 case ,并返回这个 case 的索引( chosen)。如果没有可用的 case,则会返回一个 bool 类型的值,这个值用来表示是否有 case 被成功选择。如果是 recv case, 还会返回所接收的元素。Select 函数的签名如下:

func Select(cases []SelectCase) (chosen int,recv Value,recvOK bool)

        下面我们通过一个例子来演示动态处理两个 chan 的情形。因为可以动态处理 case 数据,所以可以传入成千上万个 chan,这就解决了不能动态处理 n 个 chan 的问题。

        首先,createCases 函数分别为每个 chan 生成了 recv case 和 send case,并返回一个 reflect.SelectCase 数组。

        然后,通过一个循环 10 次的 for 循环执行 reflect.Select, 这个函数会从 cases 中选择一个 case 执行。第一次选择的肯定是 send case,因为此时 chan 中还没有元素,recv 还不可用。等 chan 中有了元素以后,就可以选择 recv case 了。这样一来,我们就可以处理不定数量的 chan 了。

func main(){var ch1 = make(chan int,10)var ch2 = make(chan int,10)// 创建 SelectCasevar cases = createCases(ch1,ch2)// 执行 10 次 selectfor i:=0; i<10;i++ {chosen,recv,ok:=reflect.Select(cases)if recv.IsValid(){// recv casefmt.Println("recv:",cases[chosen].Dir,recv,ok)} else { // send casefmt.Println("send:",cases[chosen].Dir,ok)}}
}//利用反射创建 case
func createCases(chs ...chan int)[]reflect.SelectCase{var cases []reflect.SelectCase// 创建recv casefor _, ch:= range chs {cases = append(cases,reflect.SelectCases{Dir : reflect.SelectRecv,Chan: reflect.ValueOf(ch),})}//创建 send casefor i,ch := range chs {v := reflect.ValueOf(i)cases = append(cases,reflect.SelectCase{Dir: reflect.SelectSend,Chan:
http://www.mmbaike.com/news/87957.html

相关文章:

  • 网站建设营销的技巧奉化云优化seo
  • 怎么搭建wordpress宁波seo快速排名
  • 贵州省建设网站云南网络推广服务
  • 常熟市建设局网站搜狗收录批量查询
  • 便宜做网站的公司靠谱吗如何推广app让别人注册
  • 深圳设计网站培训班搜索引擎查询
  • 网站开发拖延交货算商业诈骗整合营销方案案例
  • 优化wordpress调用文章函数淘宝关键词优化怎么弄
  • 长沙网络推广公司优化关键词的作用
  • 咸阳北京网站建设百度推广的广告靠谱吗
  • 怀柔网站建设网络销售每天做什么
  • 作业提交免费网站抖音关键词优化排名靠前
  • 网站丢失了怎么找回来网页设计代做
  • 南昌网站建设中国十大软件外包公司排名
  • 网站建设与管理的发展今日国内新闻头条15条
  • 推广怎么做?网站优化公司排名
  • 用宝塔做网站步骤滴滴友链
  • 怎么更改网站栏目id广西seo公司
  • 威海好的网站建设公司培训心得体会200字
  • 江门市亿阳科技有限公司长沙官网seo收费
  • 宝安做网站哪家好免费的黄冈网站有哪些平台
  • 如何自建网站视频什么是seo如何进行seo
  • 网站内容包括哪些佛山seo网站排名
  • 大宗商品交易平台软件seo需要掌握哪些技术
  • 互联网站建设维护有关岗位百度官方入口
  • 网站响应式是什么意思媒体发稿推广
  • wordpress短信东莞seo网站优化排名
  • 支持付费下载系统的网站模板或建站软件广东互联网网络营销推广
  • 订阅号怎么做免费的视频网站seo百度快照优化公司
  • 泉州seo-泉州网站建设公司常用的关键词优化策略有哪些