Go语言条件

条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况再执行另外的语句。下图展示了程序语言中条件语句的结构:

Go语言提供了以下几种条件判断语句:

语句 描述
if语句 if语句由一个布尔表达式后紧跟一个或多个语句组成
if...else语句 if语句后可以使用可选的else语句,else语句中的表达式在布尔表达式为false时执行
if嵌套语句 可以在ifelse if语句中嵌入一个或多个ifelse if语句
switch语句 switch语句用于基于不同条件执行不同动作
select语句 select语句类似于switch语句,但是select会随机执行一个可运行的case,如果没有case可以运行,它将阻塞,直到有case可运行

Go语言if语句

if语句由布尔表达式后紧跟一个或多个语句组成,其语法如下:

if 布尔表达式 {
/* 在布尔表达式为 true时执行 */
}

if在布尔表达式为true时,其后紧跟的语句块执行,如果为false则不执行。流程如如下:

实例代码:

package main

import "fmt"

func main()  {
/* 定义局部变量 */
var a int = 10
/* 使用if语句判断布尔表达式 */
if a < 20 {
/* 如果条件为true则执行以下语句 */
fmt.Printf("a 小于 20\n")
}
fmt.Printf("a 的值为:%d\n", a)
}

以上代码执行结果为:

a 小于 20
a 的值为:10

Go语言if...else语句

if语句后可以使用可选的else语句,else语句中的表达式在布尔表达式为false时执行,其语法为:

if 布尔表达式{
/* 在布尔表达式为true时执行 */
}else {
/* 在布尔表达式为false时执行 */
}

if在布尔表达式为true时,其后紧跟的语句块执行,如果为false则执行else语句块,流程图如下:

实例代码:

package main

import "fmt"

func main()  {
/* 定义局部变量 */
var a int = 100 /* 判断布尔表达式 */
if a < 20 {
/* 如果条件为true则执行以下语句 */
fmt.Printf("a 小于 20\n")
}else {
/* 如果条件为false则执行以下语句 */
fmt.Printf("a 不小于 20\n")
}
fmt.Printf("a 的值为:%d\n", a)
}

以上实例运行结果:

a 不小于 20
a 的值为:100

Go语言if嵌套

可以在if或者else if语句中嵌套一个或者多个if或else if语句,其语法如下:

if 布尔表达式 1 {
/* 在布尔表达式 1 为true时执行 */
if 布尔表达式 2 {
/* 在布尔表达式 2 为true时执行 */
}
}

可以使用同样的方式在if语句中嵌套else if ... else语句

实例代码:

package main

import "fmt"

func main()  {
/* 定义局部变量 */
var a int = 100
var b int = 200 /* 判断条件 */
if a == 100 {
/* if 条件语句为 true 执行 */
if b == 200 {
/* if 条件语句为 true 执行 */
fmt.Printf("a 的值为100, b 的值为200\n")
}
}
fmt.Printf("a 值为:%d\n", a)
fmt.Printf("b 值为:%d\n", b)
}

以上代码运行结果:

a 的值为100, b 的值为200
a 值为:100
b 值为:200

Go语言switch语句

switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止;switch语句执行的过程从上至下,直到找到匹配项,匹配项后面不需要添加break,其语法如下:

switch varl {
case varl1:
...
case val2:
...
default:
...
}

变量varl可以是任何类型,而varl1和varl2则可以是同类型的任意值。类型不被局限于常量或整数,但必须时相同的类型,或者最终结果为相同类型的表达式。其流程如如下:

实例代码:

package main

import "fmt"

func main()  {
/* 定义局部变量 */
var grade string = "B"
var marks int = 90 switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70: grade = "C"
default: grade = "D"
} switch {
case grade == "A":
fmt.Printf("优秀!\n")
case grade == "B", grade == "C":
fmt.Printf("良好!\n")
case grade == "D":
fmt.Printf("及格!\n")
case grade == "F":
fmt.Printf("不及格!\n")
default:
fmt.Printf("差!\n")
}
fmt.Printf("你的等级是 %s\n", grade)
}

以上代码执行结果为:

优秀!
你的等级是 A

type switch

switch语句还可以被用于type-switch来判断某个interface变量中实际存储的变量类型,其语法格式如下:

switch x.(type){
case type:
statement(s)
case type:
statement(s)
/* 可以定义任意个数的case */
default: // 可选
statement(s)
}

代码实例:

package main

import (
"fmt"
) func main() {
var x interface{} switch i := x.(type){
case nil:
fmt.Printf("x 的类型:%T", i)
case int:
fmt.Printf("x 是 int 型")
case float64:
fmt.Printf("x 是 float64 型")
case func(int) float64:
fmt.Printf("x 是 func(int) 型")
case bool, string:
fmt.Printf("x 是 bool 或 string 型" )
default:
fmt.Printf("未知型") }
}

以上代码执行结果为:

x 的类型:<nil>

Go语言select语句

select是Go中的一个控制结构,类似于通信的switch语句,每个case必须是一个通信操作,要么是发送要么是接收。select随机执行一个可运行的case,如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的,其语法如下:

select {
case communication clause:
statement(s)
case communication clause:
statement(s)
/* 可以定义任意数量的case */
default: // 可选
statement(s)
}

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

  • 每个case都必须是一个通信
  • 所有channel表达式都会被求值
  • 所有被发送的表达式都会被求值
  • 如果任意某个通信可以进行,他就执行,其他被忽略
  • 如果有多个case都可以运行,select会随机公平地选出一个执行,其他不会执行

    否则:

    1.如果有default子句,则执行该局;

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

代码实例:

package main

import "fmt"

func main() {
var c1, c2, c3 chan int
var i1, i2 int
select {
case i1 = <-c1:
fmt.Printf("received ", i1, " from c1\n")
case c2 <- i2:
fmt.Printf("sent ", i2, " to c2\n")
case i3, ok := (<-c3): // same as: i3, ok := <-c3
if ok {
fmt.Printf("received ", i3, " from c3\n")
} else {
fmt.Printf("c3 is closed\n")
}
default:
fmt.Printf("no communication\n")
}
}

以上代码执行结果:

no communication

Go语言【第五篇】:Go条件语句的更多相关文章

  1. 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等

    [源码下载] 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等 作者:webabcd 介绍不可或缺 Windows Native  ...

  2. Python学习【第五篇】循环语句

    Python循环语句 接下来将介绍Python的循环语句,程序在一般情况下是按顺序执行的. 编程语言提供了各种控制结构,允许更复杂的执行路径. 循环语句允许我们执行一个语句或语句组多次. Python ...

  3. 每天五分钟Go - 条件语句

    if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } else { /* 在布尔表达式为 false 时执行 */ } 如下代码 if a>10{ fmt.Print ...

  4. 第九篇:vue条件语句

    好家伙,终于有个简单了的 v-if    条件判断 <div id="app"> <p v-if="seen">现在你看到我了</ ...

  5. Java使用条件语句和循环结构确定控制流

    与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流.本文将简单讲解条件.循环和switch. 一.块作用域 块(block),即复合语句.是指由一对大括号括起来的若干条简单的Java语句 ...

  6. Java基础—控制流程语句(条件语句与循环结构)

    与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程.Java的控制流程结构与C和C++的控制流程机构一样,只有很少的例外情况.没有goto语句,但break语句可以带标签,可以利用它实 ...

  7. Go语言学习笔记五: 条件语句

    Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...

  8. Verilog学习笔记基本语法篇(五)········ 条件语句

    条件语句可以分为if_else语句和case语句两张部分. A)if_else语句 三种表达形式 1) if(表达式)          2)if(表达式)               3)if(表达 ...

  9. Python成长之路第一篇(4)_if,for,while条件语句

    有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...

随机推荐

  1. 【POJ2482】Stars in Your Window

    [POJ2482]Stars in Your Window 题面 vjudge 题解 第一眼还真没发现这题居然™是个扫描线 令点的坐标为\((x,y)\)权值为\(c\),则 若这个点能对结果有\(c ...

  2. netty之心跳机制

    1.心跳机制,在netty3和netty5上面都有.但是写法有些不一样. 2.心跳机制在服务端和客户端的作用也是不一样的.对于服务端来说:就是定时清除那些因为某种原因在一定时间段内没有做指定操作的客户 ...

  3. vue中开发webSocket

    先安装 sockjs-client 和 stompjs npm install sockjs-client npm install stompjs <template> <div&g ...

  4. Oracle DELETE和TRUNCATE 的区别

    语法delete from aa truncate table aa 区别 1.delete from后面可以写条件,truncate不可以. 2.delete from记录是一条条删的,所删除的每行 ...

  5. mybati缓存机制之二级缓存配置

    二级缓存配置 在MyBatis的配置文件中开启二级缓存. <setting name="cacheEnabled" value="true"/> 在 ...

  6. python3 爬虫爬取深圳公租房轮候库(深圳房网)

    深圳公租房轮候库已经朝着几十万人的规模前进了,这是截至16年10月之前的数据了,贴上来大家体会下 所以17年已更新妥妥的10W+ 今天就拿这个作为爬虫的练手项目 1.环境准备: 操作系统:win10 ...

  7. 移动性能测试之gemebench安装

    越来越多的人从事各种移动端性能测试,但工具和文档的资料却相对较少,这两天需要测试一款APP的性能,就来先简单介绍下gamebench的安装吧! 作为国人来说,使用gamebench还是有相当多的坑点: ...

  8. Objective-C 第一个小程序

    示例一 (类似C) //1.代码编写 //跟C语言一样,OC程序的入口依然是main函数,只不过写到一个.m文件中.比如这里写到一个main.m文件中(文件名可以是中文) #include <s ...

  9. 前端开发工程师 - 03.DOM编程艺术 - 第1章.基础篇(下)

    第1章.基础篇(下) Abstract: 数据通信.数据存储.动画.音频与视频.canvas.BOM.表单操作.列表操作 数据通信(HTTP协议) HTTP事务: 客户端向服务器端发送HTTP请求报文 ...

  10. 【token接口】-jmeter

    token 接口 3步骤 1.登录接口 2.提取登录接口的token 3.http 信息管理头   把提取的cookie传入  就可以了