[golang note] 流程控制
流程控制
• 流程控制语句作用
▪ 选择:根据条件跳转到不同的执行序列。
▪ 循环:根据条件反复执行某个序列。
▪ 跳转:据条件返回到某执行序列。
• 流程控制语句类型
▪ 条件语句:关键字为if、else和else if。
▪ 选择语句:关键字为switch、case和select。
▪ 循环语句:关键字为for和range。
▪ 跳转语句:关键字为goto。
条件语句
• 语法如下
// 1
if condition {
...
}
// 2
if condition {
...
} else {
...
}
// 3
if condition {
...
} else if condition {
...
}
// 4
if condition {
...
} else if condition {
...
} else {
...
}
• 注意点
▪ 条件语句不需要使用括号()将条件包含起来。
▪ 条件语句无论语句体内有几条语句,花括号{}都必须存在。
▪ 条件语句的左花括号{必须与if或else同处一行,否则编译器给出错误:syntax error: missing { after if clause。
▪ 条件语句的else必须和上一个语句体结束的右花括号}同处一行,否则编译器给出错误:syntax error: unexpected else, expecting }。
▪ 条件语句在if之后可以添加变量初始化语句,但需要使用分号;间隔。
if a := ; a >= {
fmt.Println("OK")
}
选择语句
• 语法如下
switch condition {
case v0:
...
case v1:
...
case v2:
...
case v3:
...
case v4, v5, v6:
...
default:
...
}
• 注意点
▪ 选择语句中,左花括号{必须与switch同处一行。
▪ 选择语句中,case后可以使用常量,还可以使用变量。
package main
import "fmt"
func main() {
condition :=
caseValue :=
switch condition {
case caseValue:
fmt.Printf("0")
case :
fmt.Printf("1")
default:
fmt.Printf("Default")
}
}
▪ 选择语句中,单个case后可以出现多个结果选项。
▪ 选择语句中,不需要用break来明确退出一个case。
▪ 选择语句中,只有在case中明确添加fallthrough关键字,才会继续执行下一个case。
package main
import "fmt"
func main() {
condition :=
switch condition {
case :
fmt.Printf("0")
case :
fmt.Printf("1")
fallthrough
default:
fmt.Printf("Default")
}
}
▪ 选择语句中,可不设定switch后的条件表达式,在此种情况下整个switch结构与if...else...的逻辑等同。
package main
import "fmt"
func main() {
num :=
switch {
case <= num && num <= :
fmt.Printf("0-3")
case <= num && num <= :
fmt.Printf("4-6")
case <= num && num <= :
fmt.Printf("7-9")
}
}
跳转语句
• 语法如下
goto label
• 注意点
▪ 选择语句的语义非常简单,就是跳转到本函数内的某个标签处执行。
package main
import "fmt"
func main() {
i :=
for {
i++
if i >= {
goto finish
}
}
finish:
fmt.Println("Finish")
}
循环语句
• 语法如下
// 普通循环
for i := ; i < N; i++ {
...
} // 数组循环
for i, v := range array {
...
} // 无限循环
for {
...
}
• 注意点
▪ 循环语句只支持for结构,不支持while和do-while结构。
▪ 循环语句左花括号{必须与for处于同一行。
▪ 循环语句不支持以逗号为间隔的多赋值语句,支持使用多元赋值的方式来初始化多个变量。
package main
import "fmt"
func main() {
array := []int{, , , , , }
for i, j := , len(array)-; i < j; i, j = i+, j- {
array[i], array[j] = array[j], array[i]
}
fmt.Println(array)
}
▪ 循环语句支持continue和break来控制循环,但提供了一个更高级的break,可以选择中断哪一层循环。
package main
import "fmt"
func main() {
JLoop1: // 标记循环1,此处不能有非循环代码,break label会跳出循环1
for j := ; j < ; j++ {
JLoop2: // 标记循环2,此处不能有非循环代码,break label会跳出循环2
for i := ; i < ; i++ {
if j < {
break JLoop2 // 跳出循环2
}
if i > {
break JLoop1 // 跳出循环1
}
fmt.Println(j, i)
}
}
}
[golang note] 流程控制的更多相关文章
- Golang的流程控制
流程控制 条件语句 例: var b bool = true if b{ fmt.Print("b是True") }else{ fmt.Print("b是false&qu ...
- golang之流程控制(注意点)
Go在流程控制方面特点如下: 没有do和while循环,只有一个广义的for语句 switch语句灵活多变,还可以用于类型判断 if语句和switch语句都可以包含一条初始化子语句 break语句和c ...
- golang笔记——流程控制
条件语句 if ... else if ... else 语句,如: { fmt.Println(">100") } < num { fmt.Println(" ...
- Golang - 流程控制
目录 Golang - 流程控制 1. 选择结构 2. 循环结构 3. 跳转语句 Golang - 流程控制 1. 选择结构 if else语句: //package 声明开头表示代码所属包 pack ...
- golang(3):strings和strconv使用 & 时间和日期类型 & 指针类型 & 流程控制 & 函数
strings和strconv使用 . strings.HasPrefix(s string, prefix string) bool: // 判断字符串s是否以prefix开头 . . string ...
- golang基础之三-字符串,时间,流程控制,函数
strings和strconv的使用 strings strings.HasPrefix(s string,preffix string) bool:判断字符串s是否以prefix开头 stirngs ...
- golang recover panic 流程控制的可达与不可达
--------------------------流程控制可达----------------------------- package main import "fmt" fu ...
- golang学习笔记(二):流程控制
欢迎访问我的博客和github! 今天咱们把烦人的事情丢一丢,继续来学习go的基础知识. 这篇文章记录go语言的流程控制和更多类型. 流程控制 for Go 只有一种循环结构:for 循环. 基本的 ...
- Golang通脉之流程控制
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码. ...
随机推荐
- 学会读JQuery等JS插件源码
看了 http://my249645546.iteye.com/blog/1716629 上的这篇文章感觉挺好的,所以决定转过来,谢谢这位博主. 很多人觉得jquery.ext等一些开源js源代码 十 ...
- @Bean 小知识
先说结论 @Bean 可以用在任意方法上. -- 也可以用在注解上面. @Bean 仅在Spring创建bean时起作用. 这应该算一个小技巧,在一个平常类(非@Configuration class ...
- 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...
- mysql --mysqli::multi_query 和 mysqli_multi_query
语法: 对象化:bool mysqli::multi_query ( string $query ) 过程化:bool mysqli_multi_query ( mysqli $link , stri ...
- 如何kill掉一个screen
两种方式: 1.使用screen名字,kill掉. screen -S session_name -X quit 2.激活screen: screen -r session_name 并利用exit退 ...
- ThinkPHP项目笔记之登录,注册,安全退出篇
1.先说注册 a.准备好注册页面,register.html,当然一般有,姓名,邮箱,地址等常用的. b."不要相信用户提交的一切数据",安全,安全是第一位的.所以要做判断,客户端 ...
- hrbustoj 1305:多边形(计算几何,极角排序练习)
多边形 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 113(42 users) Total Accepted: 51(3 ...
- freemarker0
assign 用于为该模板页面 创建或替换一个顶层变量 或创建或替换多个顶层变量 列子如下 <#assign name=value [in namespacehash]>,指定一个名为n ...
- SHGetSpecialFolderPath用法
The SHGetSpecialFolderPath function retrieves the path of a special folder that is identified by its ...
- [转]ASP.NET MVC 5 - 控制器
MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...