目录
总览
条件分支结构
- if-else 结构
- switch 结构
- select 结构
循环迭代结构
for (range) 结构
关键字
break
continue
return
goto + 标签
1. if else
示例
//单条件单分支
if condition {
// do something
}
//单条件双分支
if condition {
// do something
} else {
// do something
}
//多条件多分支
if condition1 {
// do something
} else if condition2 {
// do something else
} else if condition3 {
// do something else
} else {
// catch-all or default
}
初始化判断
if initialization; condition {
// do something
}
initialization 中用简短方式
:=
声明的变量的作用域只存在于 if else 结构中(在 if 结构的大括号之间,如果使用 if-else 结构则在 else 代码块中变量也会存在)
2. switch 结构
示例
switch var1 {
case val1:
...
case val2:
...
default:
...
}
1.变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值;或者最终结果为相同类型的表达式。
2.和c/c++等不一样, 不需要手动添加 break.
3.可以使用 fallthrough 强制执行下一个分支, 不会判断下一条 case 的表达式结果是否为 true
初始化判断
switch initialization {
case val1:
...
case val2:
...
default:
...
}
3. for 循环结构
//for 初始化语句; 条件语句; 修饰语句 {}
for i := 0; i < 5; i++ {
fmt.Printf("This is the %d iteration\n", i)
}
//for 条件语句 {}
i := 1
for i <= 5 {
fmt.Printf("This is the %d iteration\n", i)
}
//无限循环
for {
...
}
//for ix, val := range coll { }
for pos, char := range str {
...
}
range 中 val 始终为集合中对应索引的值拷贝,因此它一般只具有只读性质,对它所做的任何修改都不会影响到集合中原有的值.如果 val 为指针,则会产生指针的拷贝,依旧可以修改集合中的原值
4. 关键字
1. break
跳出循环,示例如下
for {
...
if condition {
break
}
...
}
//break 后从这里开始执行
2. continue
只能被用于 for 循环中, 继续下一个循环, 示例如下
for i := 0; i < 10; i++ {
if i == 5 {
continue
}
print(i)
print(" ")
}
continue 忽略剩余的循环体而直接进入下一次循环的过程,执行之前依旧需要满足循环的判断条件。
3. 标签与 goto
for、switch 或 select 语句都可以配合标签(label)形式的标识符使用,即某一行第一个以冒号(:
)结尾的单词 (gofmt 会将后续代码自动移至下一行)
标签的名称是大小写敏感的,为了提升可读性,一般建议使用全部大写字母
使用标签和 goto 语句是不被鼓励的:它们会很快导致非常糟糕的程序设计,而且总有更加可读的替代方案来实现相同的需求。
func testGoto() {
...
if condition {
goto TARGET
}
...
TARGET:
...
}