Golang基础笔记六之流程控制
本文首发于公众号:Hunter后端
原文链接:Golang基础笔记六之流程控制
本篇笔记介绍 Golang 里流程控制相关的一些语法,以下是本篇笔记目录:
- 条件语句
- 循环语句
1、条件语句
1. if-else 语句
if-else 语句的基本语法如下:
if condition {
}else if condition {
}else {
}
下面是一个示例:
num := 10
if num <= 5 {
fmt.Println("num 小于等于 5")
} else if num > 5 && num <= 10 {
fmt.Println("num 大于 5 小于等于 10")
} else {
fmt.Println("num 大于 10")
}
if 语句中,还可以包含一个初始化语句,用于条件判断之前执行一些操作:
if num := 10; num <= 5 {
fmt.Println("num 小于等于 5")
} else if num > 5 && num <= 10 {
fmt.Println("num 大于 5 小于等于 10")
} else {
fmt.Println("num 大于 10")
}
注意:这里 num 这个变量的作用域仅限于 if-else 块。
这里的 if-else 语句,除了最开始的 if 语句是必需的外,后面的 else-if 和 else 模块都是可选的。
2. switch 语句
switch 语句有两种形式,一种是表达式 switch,一种是类型 switch。
1. 表达式 switch
下面这个示例是基于表达式的值来执行不同的模块:
day := 4
switch day {
case 1, 2, 3, 4, 5:
fmt.Println("工作日")
case 6:
fmt.Println("星期六")
case 7:
fmt.Println("星期日")
default:
fmt.Println("非法星期数")
}
下面这个示例是无表达式的,其效果等同于 if-else 语句:
score := 80
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 80:
fmt.Println("良好")
case score >= 70:
fmt.Println("一般")
default:
fmt.Println("差劲")
}
2. 类型 switch
类型 switch 用于根据变量的类型来执行不同的代码块,通常用于处理接口类型的变量,接口相关的内容后面再介绍,这里先直接使用,使用方式和前面的 switch 类似:
func printType(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("%v 是整数类型\n", v)
case string:
fmt.Printf("%v 是字符串类型\n", v)
default:
fmt.Printf("%v 是其他类型\n", v)
}
}
func main() {
num := 10
str := "hello"
printType(num)
printType(str)
}
2、循环语句
循环语句就是 for 循环操作了,这里介绍几种类型:
1. for 循环
for 循环的用法和其他语言的类似,比如从 0 循环到 4:
for i := 0; i < 5; i++ {
fmt.Printf("i:%v\n", i)
}
2. for-range 循环
for-range 循环可用于数组、切片、字符串、map 等可迭代对象,循环的参数又两个,分别是索引和对应的元素。
这里逐个介绍其示例:
1) 数组/切片
数组或者切片的示例如下:
s := []string{"a", "b", "c"}
for index, value := range s {
fmt.Printf("index: %v, value: %v\n", index, value)
}
前面的 index 是索引下标,value 是下标对应的值。
如果不需要 index 或者 value,直接置为 "_" 即可:
s := []string{"a", "b", "c"}
for _, value := range s {
fmt.Printf("value: %v\n", value)
}
2) 字符串
对字符串是用 for-range 返回的索引是字节索引:
s := "hello world"
for index, char := range s {
fmt.Printf("index:%d, char:%c\n", index, char)
}
而如果字符串中包含中文,Go 能够将其自动解码,且返回中文字符开始的字节索引位置:
s2 := "hello 世界"
for index, char := range s2 {
fmt.Printf("index:%d, char:%c\n", index, char)
}
3) map
对 map 使用 for-range 操作会迭代其 key-value:
m := map[string]int{
"a": 1,
"b": 4,
"c": 2,
}
for k, v := range m {
fmt.Printf("k:%s, v:%d\n", k, v)
}
3. 无限循环
对于前面的 for 循环,如果我们不设置任何条件,就可以实现一个无限循环,可以在内部通过 continue 和 break 来控制进入下一次循环或者退出循环。
以下是一个示例:
i := 0
for {
i++
if i%2 == 0 {
fmt.Println("i 是偶数", i)
continue
}
if i == 5 {
fmt.Println("i = 5, 退出循环")
break
}
}
Golang基础笔记六之流程控制的更多相关文章
- Java笔记(六)……程序流程控制
判断结构 三种结构: 1: if(条件表达式) 2: { 3: 执行语句; 4: } 5: 6: if(条件表达式) 7: { 8: 执行语句; 9: } 10: else 11: { 12: 执行 ...
- iOS开发Swift篇—(六)流程控制
iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...
- Java04-Java语法基础(三)流程控制
Java04-Java语法基础(三)流程控制 一.数据类型的转换 1.自动转换:在赋值运算中,占字节数大的类型会自动向字节小的类型转换 double d1 = 3.14; int t1 = d1; 2 ...
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...
- 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...
- 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...
- 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用
047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...
随机推荐
- Windows 延缓写入失败及解决方法
场景重现 某天系统弹出警告:某盘符延缓写入失败 解决办法 [Win + R]或手搓打开cmd.exe,键入chkdsk: 然后等待校检完成. 完成之后到警告提示对应的盘符下进行查错并修复 然后等待检查 ...
- STM8S003驱动TM1650偶发性故障
故障现象:STM8S003驱动TM1650数码管显示,偶发TM1650无法初始化造成数码管点不亮. 已经在程序中对TM1650初始化之前加上了延时,但是问题并未改善. 之前发生过类似情况,STM8S0 ...
- Sunshine+Moonlight让安卓Pad或IPad变6ms低延迟高质量无线显示器 #串流 #无线副屏
1.背景 最近看到多个博主在分享局域网或者公网使用Sunshine+Moonlight串流技术,将电脑画面投屏到其他屏幕(电视.安卓和苹果平板等等),宣称是个位数的延迟,并且能用平板打steam游戏( ...
- vue获取浏览器地址栏参数
this.accountId = this.$route.query.id
- CI/CD 概念简介
〇.前言 CI/CD 是现代软件开发的核心实践,通过自动化和协作,显著提升交付效率和质量. 本文将对 CI 和 CD 这两个概念进行简要介绍,供参考. 一.CI/CD 的核心概念 CI/CD 是 De ...
- 判断属性值,选择性执行下一步(get element attribute指令的用法)
应用场景: 下图线下支付,在退款前需要勾选这种支付方式,否则无法实现支付. 如果在测试脚本内即加入勾选指令,那么在下次执行的时候就会再次勾选,从而造成去除勾选的操作 对比一下勾选前后,勾选框元素内容组 ...
- sonarqube+gitlab+jenkins+maven集成搭建(四)
安装Gitlab 关闭firewalld防火墙和selinux防火墙,如图1-2:[root@localhost ~]# systemctl stop firewalld[root@localhost ...
- 支持命令行输入中文(例如redis-cli输入中文)
修改 cmd 控制台默认代码页编码的几种方法[GBK.UTF-8]_FKNIGHT 的博客-CSDN博客_修改cmd编码 1.进入redis-cli.exe所在文件夹 2.在路径栏输入cmd回车 3. ...
- 获取传入值的上一个月【月初】和【月末】【yyyy-MM-dd】
获取传入值的上一个月[月初]和[月末] 常量值:String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd"; // 获取传入值的上一个月月初 : fo ...
- 数据库事务回滚:FastAPI中的存档与读档大法
title: 数据库事务回滚:FastAPI中的存档与读档大法 date: 2025/05/10 00:18:52 updated: 2025/05/10 00:18:52 author: cmdra ...