Go流程结构(if)
一、程序的流程结构
程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。
顺序结构:从上向下,逐行执行。
选择结构:条件满足,某些代码才会执行。0-1次
分支语句:if,switch,select
循环结构:条件满足,某些代码会被反复的执行多次。0-N次
循环语句:for
二、条件语句
2.1 if 语句
语法格式:
- if 布尔表达式 {
- /* 在布尔表达式为 true 时执行 */
- }
- if 布尔表达式 {
- /* 在布尔表达式为 true 时执行 */
- } else {
- /* 在布尔表达式为 false 时执行 */
- }
- if 布尔表达式1 {
- /* 在布尔表达式1为 true 时执行 */
- } else if 布尔表达式2{
- /* 在布尔表达式1为 false ,布尔表达式2为true时执行 */
- } else{
- /* 在上面两个布尔表达式都为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)
- }
2.2 if 变体
如果其中包含一个可选的语句组件(在评估条件之前执行),则还有一个变体。它的语法是
- if statement; condition {
- }
-
- if condition{
- }
示例代码:
- package main
-
- import (
- "fmt"
- )
-
- func main() {
- if num := 10; num % 2 == 0 { //checks if number is even
- fmt.Println(num,"is even")
- } else {
- fmt.Println(num,"is odd")
- }
- }
需要注意的是,num的定义在if里,那么只能够在该if..else语句块中使用,否则编译器会报错的。
2.3 switch语句:“开关”
switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块。它可以被认为是一种惯用的方式来写多个if else子句。
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。 switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。
而如果switch没有表达式,它会匹配true
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。
变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。 您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。
- switch var1 {
- case val1:
- ...
- case val2:
- ...
- default:
- ...
- }
示例代码:
- 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" //case 后可以由多个数值
- 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);
- }
2.4 fallthrough
如需贯通后续的case,就添加fallthrough
- package main
- import "fmt"
- func main() {
- /*
- switch中的break和fallthrough语句
- break:可以使用在switch中,也可以使用在for循环中
- 强制结束case语句,从而结束switch分支
- fallthrough:用于穿透switch
- 当switch中某个case匹配成功之后,就执行该case语句
- 如果遇到fallthrough,那么后面紧邻的case,无需匹配, 执行穿透执行。
- fallthrough应该位于某个case的最后一行
- */
- n := 2
- switch n {
- case 1:
- fmt.Println("我是熊大")
- fmt.Println("我是熊大")
- fmt.Println("我是熊大")
- case 2:
- fmt.Println("我是熊二")
- fmt.Println("我是熊二")
- break //用于强制结束case,意味着switch被强制结束
- fmt.Println("我是熊二")
- case 3:
- fmt.Println("我是光头强")
- fmt.Println("我是光头强")
- fmt.Println("我是光头强")
- }
- fmt.Println("-----------------")
- m := 2
- switch m {
- case 1:
- fmt.Println("第一季度。。")
- case 2:
- fmt.Println("第二季度。。")
- fmt.Println("...")
- fallthrough
- case 3:
- fmt.Println("第三季度。。")
- fallthrough
- case 4:
- fmt.Println("第四季度。。")
- }
- fmt.Println("main...over...")
- }
case中的表达式是可选的,可以省略。如果该表达式被省略,则被认为是switch true,并且每个case表达式都被计算为true,并执行相应的代码块。
示例代码:
- package main
-
- import (
- "fmt"
- )
-
- func main() {
- num := 75
- switch { // expression is omitted
- case num >= 0 && num <= 50:
- fmt.Println("num is greater than 0 and less than 50")
- case num >= 51 && num <= 100:
- fmt.Println("num is greater than 51 and less than 100")
- case num >= 101:
- fmt.Println("num is greater than 100")
- }
-
- }
switch的注意事项
case后的常量值不能重复
case后可以有多个常量值
fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。
2.5 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流程结构(if)的更多相关文章
- 【粗糙版】javascript的变量、数据类型、运算符、流程结构
本文内容: javascript的变量 javascript的数据类型 javascript的运算符 javascript的流程结构 首发日期:2018-05-09 javascript的变量 创建变 ...
- MySQL学习之流程结构
流程结构 流程结构:代码的执行顺序. if分支 根据要求选择合适的执行部分. 基本语法 if在MySQL中有两种基本用法 1.用在select查询当中,当作一种条件来进行判断. 基本语法:if(条件, ...
- C语言基础知识-程序流程结构
C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...
- Go流程结构(for)
一.程序的流程结构 程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构. 顺序结构:代码从上向下逐行的执行 选择结构:条件满足,某些代码才会被执行.0-1次 if语句,switch语句 循环结 ...
- 巨细靡遗流程控制,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang流程结构详解EP09
流程结构就是指程序逻辑到底怎么执行,进而言之,程序执行逻辑的顺序.众所周知,程序整体都是自上由下执行的,但有的时候,又不仅仅是从上往下执行那么简单,大体上,Go lang程序的流程控制结构一共有三种: ...
- shell 流程结构
if 判断语句 if [ $a == $b ] then echo "等于" else echo "不等于" fi case分支选择 case $xs in ) ...
- C++入门到理解阶段二基础篇(5)——C++流程结构
1.顺序结构 程序从上到下执行 2.选择结构(判断结构) 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). C++ 编程 ...
- 程序流程结构——if语句
c语言支持最基本的三种运行结构: 顺序结构:程序按顺序执行,不发生跳转 选择结构:根据是否满足条件 ,有选择的执行相应功能 循环结构:依据条件是否满足,循环多次执行某段代码 #define _CRT_ ...
- Python新手入门值流程结构
if-else socore =int(input('请输入成绩')); if socore>=90 : print("A") elif socore>=80 : pr ...
随机推荐
- selenium统计网页加载时间
参考网址: https://blog.csdn.net/thlzjfefe/article/details/99712974 https://blog.csdn.net/weixin_43664254 ...
- "const char *" 类型的值不能用于初始化 "char *" 类型的实体
用vs2019发现会出现这样的问题 最后发现只要设置一下就解决了,解决方案如下: 右击该项目,选择属性->c/c++->语言->将符合模式改为否就行了... 设置之后程序没有再报错, ...
- Chrome 提标 您的浏览器限制了第三方Cookie...解决方法
最近升级Chrome后会出现 您的浏览器限制了第三方Cookie,这将影响您正常登录,您可以更改浏览器的隐私设置,解除限制后重试. 解决方法: chrome://flags/ 把这句复制到浏览器回车 ...
- 忘记本地MySQL数据库密码的解决方法
平台:win7 1.打开cmd窗口,进入 MySQL的安装目录. 2.停止MySQL的服务.已经停止了. 右键MySQL,看到启动是可点击的,证明MySQL服务已停止运行. 3.将root用户对数据库 ...
- 一次m2eclipse的安装大坑经历之http://m2eclipse.sonatype.org/sites/m2e
m2eclipse 插件的安装在<Maven 实战>这本书上是这么说的: ”由于Eclipse默认没有集成对Maven的支持,幸运的是由Maven之父Jason Van Zyl创立的Son ...
- zabbix4.2配置监控nginx服务
1.监控原理 通过status模块监控(--with-http_stub_status_module) 2.修改nginx配置(/etc/nginx/conf.d/default.conf) 在被监 ...
- NPOI _导出exl(简单应用)
1. 导出exl表格,创建表格导出到客户端 public static MemoryStream Export_Table<T>(List<T> datalist) { Mem ...
- 大二组队(NABCD)
(Need)需求 很多时候,外人都不了解我们的校园.为了宣传铁大.让更多人了解校园.走进铁大. (Approach)做法 我们有最基本的展示.对校园风貌有基本的讲解.有论坛供应大家讨论. (Benef ...
- java-判断年份是不是闰年
if ((year%4==0)&&(year%100!=0)||(year%400==0)) {//是闰年 leapYear = true; }
- word文档巧替换(空行替换、空格替换、软回车替换成硬回车)
一.空行替换 在日常工作中,我们经常从网上下载一些文字材料,往往因空行多使得页数居高不下.一般方法是:在“编辑”菜单中打开“查找和替换”对话框(或按ctrl+H),在“查找内容”中输入“^p^p”“替 ...