07【保姆级】-GO语言的程序流程控制【if switch for while 】

news2024/11/26 20:26:30

之前我学过C、Java、Python语言时总结的经验:

  1. 先建立整体框架,然后再去抠细节。
  2. 先Know how,然后know why。
  3. 先做出来,然后再去一点点研究,才会事半功倍。
  4. 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。
  5. 对于GO语言,切记遵守语法格式规则。(例如python语言、例如SpringBoot框架等)
    解释:某些知识点,就是很难了解,那么先做出来,然后继续向前学习,可能在某个时间点我们就会恍然大悟。

07【保姆级】-GO语言的程序流程控制【if switch for while 】

  • 一、 分支控制(if else )
  • 二、分支控制 switch
    • 2.1 基本介绍
    • 2.2 switch 和if 的比较
  • 三、for循环
    • 3.1 语法格式
  • 四、break和continue跳转控制语句

一、 分支控制(if else )

基本语法:

if 条件表达式 {
	代码块
}

//说明:当条件表达式为true, 则执行{}中的代码。

案例:判断输入的年龄,是否大于18岁。

	var age int
	fmt.Println("请输入你的年龄:")
	fmt.Scanln(&age)
	if age > 18 {
		fmt.Println("你年龄大于18岁啦")

	} else {
		fmt.Println("你年龄小于18岁啦")
	}

Golang支持在if中,直接定义一个变量:

	var age int
	fmt.Println("请输入你的年龄:")
	fmt.Scanln(&age)
	if age > 18 {
		fmt.Println("你年龄大于18岁啦")

	} else {
		fmt.Println("你年龄小于18岁啦")
	}

在这里插入图片描述

二、分支控制 switch

2.1 基本介绍

  1. Switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,知道匹配为止。
  2. switch的执行的流程是,先执行表达式得到值,然后和case的表达式进行比较,如果相等就匹配到,然后执行对应的case的语句块,然后退出switch控制
  3. 如果switch的表达式的值都没有和任何case的表达式匹配成功,则执行default的语句。执行后退出switch的控制。最后的default语句不是必须的
  4. Golang的case后的表达式可以有多个,使用逗号间隔。
  5. golang中的case语句块不需要写break,因为默认会有,即使在默认情况下当执行case语句块后,就直接退出switch控制结构。
  6. case/switch后是一个表达式(即:常量值、变量一个有返回值的函数等都可以的)
  7. case后的各个表达式的值的数据类型,必须和switch的表达式数据类型一致
  8. case后面可以带多个表达式,使用逗号间隔。比如case 表达式1,表达式2…
  9. case后面的表达式如果是常量值(字面量),则要求不能重复
  10. switch后面可以不带表达式,类似 if else 分支来使用。
  11. Switch后也可以直接声明、定义一个变量,分号结束(不推荐)
  12. switch 穿透 fallthrough,如果在case语句块后增加 fallthrough,则会继续执行下一个case,也叫switch穿透。
  13. Type Swtich:swtich语句还可以被用于type-switch 来判断某个interface 变量中实际指向的变量类型
    在这里插入图片描述
    在这里插入图片描述

2.2 switch 和if 的比较

  1. 如果判断的具体数量不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用swtich语句,简洁高效
  2. 其他情况:对区间判断 和结果为bool类型的判断,使用if,if的使用范围更广。

三、for循环

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的 for 称为外层循环在里面的 for循环称为内层循环。【建议一般使用两层,最多不要超过 3 层】
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 jalse时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
  3. 外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次

3.1 语法格式

for 循环变量初始化;循环条件;循环变量迭代{
	循环操作(语句)
}

对上面的语法格式说明:

  • for循环,四要素
  1. 循环变量的初始化
  2. 循环条件
  3. 循环操作,也就是循环体
  4. 循环变量迭代。
  • 细节:
  1. 循环条件是返回一个布尔值的表达式
  2. for循环的第二种使用方式:

for 循环判断条件{
// 循环语句
}

  1. 循环的第三种方式。
    for {
    // 循环语句
    }

写法等价于 for ; ; {} 。是一个无限循环,通常需要配合 break语句使用。

  1. golang 提供了 for-range的方式,可以方便遍历字符串和数组。
// 传统方式
var star string = "abcdedfg" 
for i :=0; i < len(str); i++ {
	fmt.printf("%c \n",str[i])  // 使用坐标
}


// 使用 for - range方式
	var str string = "abcdefg"

	for index, val := range str {
		fmt.Printf("index = %d,val=%c \n", index, val)
	}
// 其中“index”获取字符串的下标,然后通过下标获取字符后交给val。进行打印
	/*
	index = 0,val=a
	index = 1,val=b
	index = 2,val=c
	index = 3,val=d
	index = 4,val=e
	index = 5,val=f
	index = 6,val=g
	*/

// 其实index和val就是定义的变量名
	for i, v := range str {
		fmt.Printf("index = %d,val=%c \n", i, v)
	}

四、break和continue跳转控制语句

两者区别:

  1. break:跳出循环。
  2. contunue结束本次循环,继续执行下一次循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序案例3-2 计算器

文章目录 一、运行效果二、知识储备&#xff08;一&#xff09;data-*自定义属性&#xff08;二&#xff09;模块 三、实现步骤&#xff08;一&#xff09;准备工作&#xff08;二&#xff09;实现页面结构&#xff08;三&#xff09;实现页面样式&#xff08;四&#xff09;实…

linux软链接和硬链接

1.硬链接(hard link) 每个文件的磁盘存储位置都有一个指针指向他这个指针称为inode&#xff0c;每创建一个硬链接都是指向这个inode指针&#xff0c;而不是指向这个文件的物理磁盘位置。 当有多个硬链接指向同一个inode&#xff0c;删除其中一个硬链接文件&#xff0c;他的物理…

两数相加 js

道阻且长&#xff0c;行而不辍&#xff0c;未来可期 两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 …

[Matlab]基于LSTM+NSGA2的风光火力发电策略优化

最近比较忙&#xff0c;好久没分享案例啦&#xff0c;今天简单分享一个滚动时域的多目标优化 一 模型介绍 1 风电 2 光伏 3 火电 4 储能 5 用电需求 等五个对象。 其中风电和光伏还有用电需求&#xff0c;用历史数据LSTM网络&#xff0c;训练一个预测模型&#xff1b;火电根据策…

Linux系统编程——文件的打开及创建

打开(open) 使用open函数需要包含以下三个头文件&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> open的函数定义格式 int open(const char *pathname,int flags); int open(const char *pathname,int flags,mode_t mode…

一篇带你精通php

华子目录 什么是phpphp发展史平台支持和数据库支持网站静态网站和动态网站的区别静态网站动态网站的特点 关键名词解析服务器概念IP的概念域名DNS端口 web程序的访问流程静态网站访问流程动态网站访问流程 php标记脚本标记标准标记&#xff08;常用&#xff09; php注释 什么是…

PDF有限制密码,不能复制怎么办?

大家现在接触PDF文件越来越多&#xff0c;有的时候在网上下载的PDF文件打开之后&#xff0c;发现选中文字之后无法复制。甚至其他功能也都无法使用&#xff0c;这是怎么回事&#xff1f;该怎么办&#xff1f; 当我们发现文件打开之后&#xff0c;编辑功能无法使用&#xff0c;很…

代码审计(某个人发卡系统V6.0(php))

一、前台漏洞 1、前台文件包含漏洞(如果开启了gbc,可远程包含) 注入点1&#xff1a; tyid没任何过滤&#xff0c;存在注入 payload:http://faka.com/ajax.php?actselgo POST传参: tyid1/**/union/**/select/**/*/**/from/**/if_km/**/limit/**/0,1# 注入点2: 也是没加任何…

10-Docker-分布式存储算法

01-哈希取余算法分区 哈希取余分区&#xff08;Hash Modulus Partitioning&#xff09;是一种在分布式计算和数据存储中常用的分区策略&#xff0c;其目的是将数据或计算任务分配到多个节点或服务器上&#xff0c;以实现负载均衡和提高性能。这种分区策略的核心思想是使用哈希…

Python---列表的循环遍历,嵌套

循环遍历就是使用while或for循环对列表中的每个数据进行打印输出 while循环&#xff1a; list1 [貂蝉, 大乔, 小乔]# 定义计数器 i 0 # 编写循环条件 while i < len(list1):print(list1[i])# 更新计数器i 1 for循环&#xff08;推荐&#xff09;&#xff1a; list1 [貂…

小白学安全-KunLun-M静态白盒扫描工具

一、KunLun-M简介 KunLun-M是一个完全开源的静态白盒扫描工具&#xff0c;支持PHP、JavaScript的语义扫描&#xff0c;基础安全、组件安全扫描&#xff0c;Chrome Ext\Solidity的基础扫描。开源地址&#xff1a;https://github.com/LoRexxar/Kunlun-M Cobra是一款源代码安全审计…

springboot中定时任务cron不生效,fixedRate指定间隔失效,只执行一次的问题

在调试计算任务的时候&#xff0c;手动重置任务为初始状态&#xff0c;但是并没有重新开始计算&#xff0c;检查定时任务代码&#xff1a; 从Scheduled(fixedRate 120000)可以看到&#xff0c;应该是间隔120秒执行一次该定时任务&#xff0c;查看后台日志&#xff0c;并没有重…

追寻Moonbeam身影,泰国区块链周正在火热进行中!

继Moonbeam参与HK Web3月之后&#xff0c;下一站便是由Cryptomind Group举办的泰国2023年区块链周。本次位于泰国的区块链周以“熊市中建设&#xff0c;牛市中崛起”为理念&#xff0c;旨在为对区块链技术感兴趣的个人和投资者提供机会接触行业中的团队和专家&#xff0c;并邀请…

跨境虾皮Shopee和Lazada商品详情接口采集方案

跨境虾皮和Lazada商品详情接口采集方案可以采用以下步骤&#xff1a; 了解接口文档&#xff1a;首先需要了解跨境虾皮和Lazada的商品详情接口文档&#xff0c;包括接口地址、请求参数、返回结果等信息。获取API密钥&#xff1a;为了使用API接口&#xff0c;需要获取跨境虾皮和…

五个做原型的好处和意义

绘制原型不仅是产品开发的重要基础&#xff0c;也是UI设计师在设计过程中应该采用的主要路径标识。绘制原型的重要性不亚于建筑师手中的设计图纸&#xff01;虽然原型设计可能会给产品开发带来一些误解&#xff0c;但毫不夸张地说&#xff0c;任何开发人员都可以将优秀的开发产…

将Modbus转Profinet网关用于自动给料机的案例

自动给料机通过使用Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;连接1200PLC与G120变频器Modbus通信。这种通信方式可以实现设备之间的数据交换和控制命令传输&#xff0c;大大提高了自动给料机的运行效率和精度。使用这个网关&#xff0c;1200PLC可以准确地将控制…

13 # 手写 concat 方法

concat 的使用 concat() 方法用于合并两个或多个数组。此方法不会更改现有数组&#xff0c;而是返回一个新数组。如果省略了所有参数&#xff0c;则 concat 会返回调用此方法的现存数组的一个浅拷贝。 <script>var arr1 ["k", "a", "i"…

ES|QL(Elasticsearch 查询语言)入门

作者&#xff1a;Ninoslav Miskovic 通过使用 ES|QL 直接从 Discover 创建聚合、可视化和警报&#xff0c;缩短获得见解的时间。 什么是 ES|QL&#xff08;Elasticsearch 查询语言&#xff09;&#xff1f; ES|QL&#xff08;Elasticsearch 查询语言&#xff09;是 Elastic 全…

文件包含 [ZJCTF 2019]NiZhuanSiWei1

打开题目 代码审计 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ 首先isset函数检查text参数是否存在且不为空 用file_get_contents函数读取text制定的文件内容并与welcome to the zjctf进行强比较 echo "<br><h…

ByteBuf和ByteBuffer

一、背景简介 ByteBuf&#xff0c;顾名思义&#xff0c;就是字节缓冲区&#xff0c;是Netty中非常重要的一个组件。熟悉jdk NIO的同学应该知道ByteBuffer&#xff0c;正是因为jdk原生ByteBuffer使用比较复杂&#xff0c;某些场景下性能不是太好&#xff0c;netty开发团队重新设…