Go语言入门指南:基础语法和常用特性解析(四) | 青训营

51 阅读4分钟

本文主要介绍Go语言中条件语句 select ,循环控语句 Goto、Break、Continue的基础使用语句。

条件语句select

select 语句

select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

select 是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。  

select 随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。

Go 编程语言中 select 语句的语法如下:


select {

    case communication clause  :

       statement(s);      

    case communication clause  :

       statement(s);

    /* 你可以定义任意数量的 case */

    default : /* 可选 */

       statement(s);

}

以下描述了 select 语句的语法:


    每个case都必须是一个通信

    所有channel表达式都会被求值

    所有被发送的表达式都会被求值

    如果任意某个通信可以进行,它就执行;其他被忽略。

    如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。

    否则:

    如果有default子句,则执行该语句。

    如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。

select可以监听channel的数据流动

select的用法与switch语法非常类似,由select开始的一个新的选择块,每个选择条件由case语句来描述。

与switch语句可以选择任何使用相等比较的条件相比,select由比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作。


    select { //不停的在这里检测

    case <-chanl : //检测有没有数据可以读

    //如果chanl成功读取到数据,则进行该case处理语句

    case chan2 <- 1 : //检测有没有可以写

    //如果成功向chan2写入数据,则进行该case处理语句

 

    //假如没有default,那么在以上两个条件都不成立的情况下,就会在此阻塞//一般default会不写在里面,select中的default子句总是可运行的,因为会很消耗CPU资源

    default:

    //如果以上都没有符合条件,那么则进行default处理流程

    }

在一个select语句中,Go会按顺序从头到尾评估每一个发送和接收的语句。

如果其中的任意一个语句可以继续执行(即没有被阻塞),那么就从那些可以执行的语句中任意选择一条来使用。  

如果没有任意一条语句可以执行(即所有的通道都被阻塞),那么有两种可能的情况:  

①如果给出了default语句,那么就会执行default的流程,同时程序的执行会从select语句后的语句中恢复。  

②如果没有default语句,那么select语句将被阻塞,直到至少有一个case可以进行下去。

Golang select的使用及典型用法

基本使用

select是Go中的一个控制结构,类似于switch语句,用于处理异步IO操作。select会监听case语句中channel的读写操作,当case中channel读写操作为非阻塞状态(即能读写)时,将会触发相应的动作。  

select中的case语句必须是一个channel操作

select中的default子句总是可运行的。

如果有多个case都可以运行,select会随机公平地选出一个执行,其他不会执行。

如果没有可运行的case语句,且有default语句,那么就会执行default的动作。

如果没有可运行的case语句,且没有default语句,select将阻塞,直到某个case通信可以运行

循环嵌套

在 for 循环中嵌套一个或多个 for 循环

以下为 Go 语言嵌套循环的格式:


for [condition |  ( init; condition; increment ) | Range]

{

   for [condition |  ( init; condition; increment ) | Range]

   {

      statement(s)

   }

   statement(s)

}  

无限循环

如过循环中条件语句永远不为 false 则会进行无限循环,我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环:

循环控制Goto、Break、Continue

循环控制语句

循环控制语句可以控制循环体内语句的执行过程。

GO 语言支持以下几种循环控制语句:

Goto、Break、Continue


    1.三个语句都可以配合标签(label)使用

    2.标签名区分大小写,定以后若不使用会造成编译错误

    3.continuebreak配合标签(label)可用于多层循环跳出

    4.goto是调整执行位置,与continuebreak配合标签(label)的结果并不相同  

总结

本文主要介绍Go语言中条件语句 select ,循环控语句 Goto、Break、Continue的基础使用语句。学习条件选择、循环流程。