6、流程控制
目录
- 一、if
- 二、switch
- 三、for
- 四、break与continue
- 五、goto与Label
一、if
- if使用:逻辑表达式成立,就会执行{}里的内容;逻辑表达式不需要加()
if 5 > 9 {fmt.Println("5>9")
}
- if句子中允许包含1个(仅1个)分号:在分号前初始化一些局部变量(即只在if块内可见)
func main() {m := make(map[int]string, 10)m[0] = "abc"if value, ok := m[1]; ok {fmt.Printf("[%s]", value)} else {fmt.Printf("[%s]", m[0])}}
二、switch
- switch:switch和case后面可以跟常量、变量或函数表达式,只要它们表示的数据类型相同就行
func main() {color := "black"switch color {case "green": //相当于 if color== "green"fmt.Println("go")case "red": //相当于else if color== "red"fmt.Println("stop")default: //相当于elsefmt.Printf("invalid traffic signal: %s\n", strings.ToUpper(color)) //invalid traffic signal: BLACK}
}
- switch+表达式:
- switch后带表达式时,switch-case只能模拟相等的情况;
- 如果switch后不带表达式,case后就可以跟任意的条件表达式
func add(a int) int {return a + 10
}func main() {switch {case add(5) > 10:fmt.Println("right")default:fmt.Println("wrong")}
}
- switch Type
func switch_type() {var num interface{} = 6.5//等价形式switch num.(type) {case int:value := num.(int)fmt.Printf("number is int %d\n", value)case float64:value := num.(float64)fmt.Printf("number is float64 %f\n", value)case byte:value := num.(byte)fmt.Printf("number is byte %d\n", value)default:fmt.Println("neither")}
}
- switch效率:从上往下,只要找到成立的case,就不再执行后面的case了;所以为提高性能,把大概率会满足的情况往前放
- fallthrough:
- case里如果带了fallthrough,则执行完本case还会去判断下一个case是否满足
- 在switch type语句的 case 子句中不能使用fallthrough
func no_fall(age int) {switch {case age > 50:fmt.Println("退休")case age > 25:fmt.Println("生子")case age > 22:fmt.Println("结婚")}
}func fall(age int) {switch {case age > 50:fmt.Println("退休")fallthroughcase age > 25:fmt.Println("生子")fallthroughcase age > 22:fmt.Println("结婚")}
}func main() {no_fall(60) //退休fmt.Println("-----------------------")fall(60)//退休//生子//结婚
}
三、for
- for遍历
func main() {arr := []int{1, 2, 3, 4, 5}for i := 0; i < len(arr); i++ { //正序遍历切片fmt.Printf("%d: %d\n", i, arr[i])}
}
- for range遍历:for range拿到的是数据的拷贝
- 遍历数组或切片:
for i, ele := range arr - 遍历string:
for i, ele := range "我会唱ABC" //ele是rune类型 - 遍历map,go不保证遍历的顺序:
for key, value := range m - 遍历channel,遍历前一定要先close:
for ele := range ch
- 遍历数组或切片:
func main() {str := "我会唱ABC" //1个汉字占3个bytefmt.Printf("len(str) = %d\n", len(str)) // len(str) = 12for i, ele := range str {fmt.Printf("%d %c\n", i, ele)}// 0 我// 3 会// 6 唱// 9 A// 10 B// 11 Cfmt.Println("--------------------")brr := []byte(str)fmt.Printf("len(brr) = %d\n", len(brr)) //len(brr) = 12for i, ele := range brr {fmt.Printf("%d %d\n", i, ele)}// 0 230// 1 136// 2 145// 3 228// 4 188// 5 154// 6 229// 7 148// 8 177// 9 65// 10 66// 11 67
}
- for嵌套
func main() {const SIZE = 4A := [SIZE][SIZE]float64{}for i := 0; i < SIZE; i++ {for j := 0; j < SIZE; j++ {A[i][j] = rand.Float64() //[0,1)中的随机数}}fmt.Println(A)
}
四、break与continue
- break与continue区别
- break与continue用于控制for循环的代码流程,并且只针对最靠近自己的外层for循环
- break和continue都是针对for循环的,不针对if或switch
- break:退出for循环,且本轮break下面的代码不再执行
- continue:本轮continue下面的代码不再执行,进入for循环的下一轮
func break_for() {arr := []int{1, 2, 3, 4, 5}for i, ele := range arr {fmt.Println("before break", i, ele)if i > 2 {break}fmt.Println(i, ele)}}func continue_for() {arr := []int{1, 2, 3, 4, 5}for i, ele := range arr {fmt.Println("before continue", i, ele)if i > 2 {continue}fmt.Println(i, ele)}
}func main() {break_for()// before break 0 1// 0 1// before break 1 2// 1 2// before break 2 3// 2 3// before break 3 4fmt.Println("--------------")continue_for()// before continue 0 1// 0 1// before continue 1 2// 1 2// before continue 2 3// 2 3// before continue 3 4// before continue 4 5
}
五、goto与Label
- goto、Label
func main() {var i int = 4
MY_LABEL:i += 3fmt.Println(i)goto MY_LABEL //返回定义MY_LABEL的那一行,把代码再执行一遍(会进入一个无限循环)
}
相关文章:
6、流程控制
目录一、if二、switch三、for四、break与continue五、goto与Label一、if if使用:逻辑表达式成立,就会执行{}里的内容;逻辑表达式不需要加() if 5 > 9 {fmt.Println("5>9") }if句子中允许包含1个(仅1个)分号:在分…...
Linux中最基本常见命令总结
❤❤💛💛💚💚💙💙💜💜您的认可是对我最大的帮助💜💜💙💙💚💚💛💛❤❤ 🤎&…...
Python学习-----模块2.0(常用模块之时间模块-->time)
目录 前言: time简介 导入模块 1.时间戳 2.时间元组 (1)把时间戳转换为元组形式 (2)元组转换为时间戳输出 (3)把元组转换为格式化时间 (4)把时间戳转换为格式化时间…...
XXL-JOB分布式任务调度框架(二)-策略详解
文章目录1.引言2.任务详解2.1.执行器2.2.基础配置3.路由策略(第一个)-案例4.路由策略(最后一个)-案例5.轮询策略-案例6.随机选取7.轮询选取8.一致性hash9.最不经常使用 (LFU)10.最近最久未使用(LRU)11.故障转移12.忙碌转移13.分片广播任务14.父子任务15.…...
JAVA练习54-最小栈
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-最小栈 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 2月18日练习内容…...
Redis-哨兵模式以及集群
在开始这部分内容之前需要先说一下复制功能,因为这是Redis实现主从数据同步的实现方式。复制功能如果存在两台服务器的话,我们可以使用redis的复制功能,让一台服务器去同步另一台服务器的数据。现在我启动了两台redis服务器,一个端…...
过滤器和监听器
1、过滤器Filter 作用是防止SQL注入、参数过滤、防止页面攻击、空参数矫正、Token校验、Session验证、点击率统计等等; 使用Filter的步骤 新建类,实现Filter抽象类;重写init、doFilter、destroy方法;在SpringBoot入口中添加注解…...
Acwing 第 91 场周赛
Powered by:NEFU AB-IN B站直播录像! Link 文章目录Acwing 第 91 场周赛A AcWing 4861. 构造数列题意思路代码B AcWing 4862. 浇花题意思路代码C AcWing 4863. 构造新矩阵题意思路代码Acwing 第 91 场周赛 A AcWing 4861. 构造数列 题意 略 思路 将每个数的每一位…...
JavaEE|套接字编程之UDP数据报
文章目录一、DatagramSocket API构造方法常用方法二、DatagramPacket API构造方法常用方法E1:回显服务器的实现E2:带有业务逻辑的请求发送一、DatagramSocket API 在操作系统中,把socket对象当成了一个文件处理。等价于是文件描述符表上的一项。 普通的文件…...
如何使用Python创建一个自定义视频播放器
目录 1、安装vlc的64位版本。 2、安装python的vlc模块。 3、编写如下代码,包含了播放,暂停,停止、音量控制功能。 4、来看一看运行结果。 5、如果遇到播放不了的问题,解决方式如下: 这个例子使用VLC作为视频播放器…...
Elasticsearch进行优化-使用索引拆分(Split)和索引收缩(shrink )
一、索引拆分和收缩的场景 在Elasticsearch集群部署的初期我们可能评估不到位,导致分配的主分片数量太少,单分片的数据量太大,导致搜索时性能下降,这时我们可以使用Elasticsearch提供的Split功能对当前的分片进行拆分,…...
数论 —— 高斯记号(Gauss mark)
定义 数学上,高斯记号(Gauss mark)是指对取整符号和取小符号的统称,用于数论等领域。 设 x∈Rx \in \textbf{R}x∈R,用 [x][x][x] 表示不超过 xxx 的最大整数。也可记作 [x][x][x]。设 x∈Rx \in \textbf{R}x∈R&…...
【随笔】程序员眼中的 CPU,“没有灵魂的躯体”
引言 先引用一段比较有意思的论述: 现实中每个人是由两部分构成,灵魂和躯体,灵魂依附于躯体游走于世间,现实中我们面对的每个人其实面对的是其灵魂而非肉体,肉体不过是表象而已。 灵魂本性乃一恶物,寄生于…...
算法的时间复杂度
算法在编写成可执行程序后,运行时需要消耗时间资源和空间(内存)资源,因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的。 时间复杂度主要衡量一个算法运行的快慢,而空间复杂度主要衡量一个算法运…...
华为OD机试 - 叠放书籍(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 寻找路径 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - 五键键盘 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - IPv4 地址转换成整数 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试 - 对称美学 | 备考思路,刷题要点,答疑 …...
进程间通信(重点)
概念 进程是一个独立的资源分配单元,不同进程之间的资源是独立的进程并非孤立的,不同进程需要进行信息的交互和状态的传递,因此需要进程之间的通信【IPC: Inter processes communication】 如qq聊天,qq在每个人的手机上是独立的…...
Reverse入门[不断记录]
文章目录前言一、[SWPUCTF 2021 新生赛]re1二、[SWPUCTF 2021 新生赛]re2三、[GFCTF 2021]wordy[花指令]四、[NSSRound#3 Team]jump_by_jump[花指令]五、[NSSRound#3 Team]jump_by_jump_revenge[花指令]前言 心血来潮,想接触点Reverse,感受下Reverse&am…...
如何实现外网访问内网ip?公网端口映射或内网映射来解决
本地搭建服务器应用,在局域网内可以访问,但在外网不能访问。如何实现外网访问内网ip?主要有两种方案:路由器端口映射和快解析内网映射。根据自己本地网络环境,结合是否有公网IP,是否有路由权限,…...
[acwing周赛复盘] 第 91 场周赛20230218
[acwing周赛复盘] 第 91 场周赛20230218 一、本周周赛总结二、 4861. 构造数列1. 题目描述2. 思路分析3. 代码实现三、4862. 浇花1. 题目描述2. 思路分析3. 代码实现四、4863. 构造新矩阵1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 这周挺难的。T1 贪心分…...
蓝桥12届
小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都是 32 位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问 256MB 的空间可以存储多少个 32 位二进制整数?1MB 1024KB 1KB 1024字节(byte) 1字节 8位…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
