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

免费建立自己的网站空间网站设计借鉴其它网站侵权吗

免费建立自己的网站空间,网站设计借鉴其它网站侵权吗,新乡彩票网站建设,全景旅游网站项目建设判断语句 Go 语言提供了以下几种条件判断语句#xff1a; 语句描述if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。if…else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。if 嵌套语句你可以在 if 或 else if 语句…判断语句 Go 语言提供了以下几种条件判断语句 语句描述if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。if…else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。if 嵌套语句你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。switch 语句switch 语句用于基于不同条件执行不同动作。select 语句select 语句类似于 switch 语句但是select会随机执行一个可运行的case。如果没有case可运行它将阻塞直到有case可运行。 注意Go 没有三目运算符所以不支持 ?: 形式的条件判断。 本文只介绍select 语句 基本 select 语法 select 是 Go 中的一个控制结构类似于 switch 语句。 select 语句只能用于通道操作每个 case 必须是一个通道操作要么是发送要么是接收。 select 语句会监听所有指定的通道上的操作一旦其中一个通道准备好就会执行相应的代码块。 如果多个通道都准备好那么 select 语句会随机选择一个通道执行。如果所有通道都没有准备好那么执行 default 块中的代码。 Go 编程语言中 select 语句的语法如下 select {case - channel1:// 执行的代码case value : - channel2:// 执行的代码case channel3 - value:// 执行的代码// 你可以定义任意数量的 casedefault:// 所有通道都没有准备好执行的代码 }以下描述了 select 语句的语法 每个 case 都必须是一个通道 所有 channel 表达式都会被求值 所有被发送的表达式都会被求值 如果任意某个通道可以进行它就执行其他被忽略。 如果有多个 case 都可以运行select 会随机公平地选出一个执行其他不会执行。 否则 如果有 default 子句则执行该语句。如果没有 default 子句select 将阻塞直到某个通道可以运行Go 不会重新对 channel 或值进行求值。 select 语句应用演示1 package mainimport (fmttime )func main() {c1 : make(chan string)c2 : make(chan string)go func() {time.Sleep(1 * time.Second)c1 - one}()go func() {time.Sleep(2 * time.Second)c2 - two}()for i : 0; i 2; i {select {case msg1 : -c1:fmt.Println(received, msg1)case msg2 : -c2:fmt.Println(received, msg2)}} }以上代码执行结果为 received one received two以上实例中我们创建了两个通道 c1 和 c2。 select 语句等待两个通道的数据。如果接收到 c1 的数据就会打印 “received one”如果接收到 c2 的数据就会打印 “received two”。 select 语句应用演示2 以下实例中我们定义了两个通道并启动了两个协程Goroutine从这两个通道中获取数据。在 main 函数中我们使用 select 语句在这两个通道中进行非阻塞的选择如果两个通道都没有可用的数据就执行 default 子句中的语句。 以下实例执行后会不断地从两个通道中获取到的数据当两个通道都没有可用的数据时会输出 “no message received”。 package mainimport fmtfunc main() {// 定义两个通道ch1 : make(chan string)ch2 : make(chan string)// 启动两个 goroutine分别从两个通道中获取数据go func() {for {ch1 - from 1}}()go func() {for {ch2 - from 2}}()// 使用 select 语句非阻塞地从两个通道中获取数据for {select {case msg1 : -ch1:fmt.Println(msg1)case msg2 : -ch2:fmt.Println(msg2)default:// 如果两个通道都没有可用的数据则执行这里的语句fmt.Println(no message received)}} }select 语句的使用场景 以下是一些 select 语句的使用场景 等待多个通道的消息多路复用 当我们需要等待多个通道的消息时使用 select 语句可以非常方便地等待这些通道中的任意一个通道有消息到达从而避免了使用多个goroutine进行同步和等待。 超时等待通道消息 当我们需要在一段时间内等待某个通道有消息到达时使用 select 语句可以与 time 包结合使用实现定时等待。 在通道上进行非阻塞读写 在使用通道进行读写时如果通道没有数据读操作或写操作将会阻塞。但是使用 select 语句结合 default 分支可以实现非阻塞读写从而避免了死锁或死循环等问题。 因此select 的主要作用是在处理多个通道时提供了一种高效且易于使用的机制简化了多个 goroutine 的同步和等待使程序更加可读、高效和可靠。 channel 与 select 结合的常见用途 利用 default 分支避免阻塞 select 的 default 分支语义当所有 case 语句里读/写 channel 阻塞时会执行 default! 无论 channel 是否有 buffer。 有些时候我们可能不希望阻塞在写入 channel 上那可以利用 select default 的特性这样封装一个函数当写入阻塞时返回一个 false让外界可以处理阻塞的情况 func tryWriteChannel(c chan- int, value int) bool {select {case c - valuereturn truedefault: //其他没就绪时会执行return false} }这样使用 //active - 1 //之前直接写 channel如果满了就会阻塞 writed : tryWriteChannel(active, 1) //改成这样可以在阻塞时处理相关逻辑 if !writed {log.Println(failed to write channel)return }实现超时 假如我们想在一个 channel 的读/写操作上加一个超时逻辑可以通过这样实现 在 select 代码块中加一个 case这个 case 会在超时后执行这样会结束其他 case。 比如这样 func tryGetSemaphore(c chan- struct{}) bool {select {case c - struct {}{}:return truecase - time.After(1 * time.Second): //在写 channel 的基础上额外加一个情况超时情况log.Println(timeout!!!)//1s 后返回可以在这里做超时处理return true} }及时调用 timer 的 Stop 方法回收 Timer 资源。 心跳机制 循环执行一个额外的 case这个 case 会定时返回。 func worker() {heartbeat : time.NewTicker(30 * time.Second)defer heartbeat.Stop()for {select {case -c:// ... do some stuffcase - heartbeat.C://... do heartbeat stuff}} }time.NewTicker 会创建一个定时执行的心跳可以把这个 ticker channel 读取的操作放到一个 case 里这样 select 代码块就会定时执行一次。
http://www.w-s-a.com/news/70239/

相关文章:

  • wordpress建站动画网站宣传的手段有哪些?(写出五种以上)
  • 做么网站有黄医疗机构网站备案
  • 企业年金是1比3还是1比4北京厦门网站优化
  • 政务信息网站建设工作方案云南建设工程质量监督网站
  • 如何做一份企业网站免费的短视频素材库
  • 云脑网络科技网站建设咸阳软件开发
  • seo对网站优化网站更换程序
  • 网站建设放什么科目中小学生在线做试卷的网站6
  • 网站建设推广公司排名绥化建设局网站
  • 凡科做的网站为什么打不开苏州行业网站建设
  • 南昌定制网站开发费用微信小商店官网入口
  • 深圳网站建设费用找人做的网站怎么看ftp
  • 做网站cookie传值dedecms网站后台
  • 温州网站推广网站建设要学会什么
  • c 网站开发框架品牌策划方案范文
  • 儿童摄影作品网站多元网络兰州网站建设
  • 电脑上不了建设厅网站常德网站建设费用
  • 做单页免费模板网站最新办公室装修风格效果图
  • 中国铁路建设投资公司网站熊学军想开网站建设公司
  • 优化一个网站多少钱网站开发北京
  • html教学关键词优化价格
  • 黄冈论坛网站有哪些给wordpress首页添加公告栏
  • 初中做数学题的网站做淘宝必备网站
  • 买拆车件上什么网站谁有那种手机网站
  • 一家专做有机蔬菜的网站万户网络是干嘛的
  • 十堰百度网站建设八宝山做网站公司
  • 地区电商网站系统建筑施工图纸培训班
  • 网站外包维护一年多少钱医院网站 功能
  • 电子商务市场的发展前景seo推广平台服务
  • 乐清网页设计公司哪家好seo推广任务小结