流程控制
2022/1/9大约 1 分钟Go
流程控制
if
基本形式
if condtion1 {
// do something
} else if condition2 {
// do something else
} else {
// catch-all or default
}
条件是可以写简短语句
if v := x - 100; v < 0{
return v
}
switch
支持 break,fallthrough 语句,而 if 不支持
- break 随时终止执行,跳出 switch
- fallthrought 直接进入下一个分支
写法1 switch 变量 case 值
这种写法适合分支较多且非常典型,对 var1 变量进行 == 判断
switch var1 {
case value1:
break
case value2:
fallthrough // 直接进入下一个分支,执行代码,也就是会执行 f()
case value3:
f()
default:
}
原生支持类型判断(switch 特有)
switch var2.(type) {
case int:
fmt.Println("int")
case float32:
fmt.Println("float32")
default:
fmt.Println("未知类型")
case 值的语句还支持多个值
switch var2.(type) {
case int, float32, float64:
...
case string:
...
}
写法2 switch case 一条或多条语句
这种写法不限于只对 var1 变量做判断,可以写其他语句
switch {
case var1 >= 1 && var1 < 10:
fmt.Println(111)
case var1 >= 10:
fmt.Println(222)
default:
fmt.Println("default")
}
for
Go 只有一种循环,就是 for 循环
常规
for i := 0 i < 10; i++ {
sum += 1
}
实现 while
go 没有 while 关键字,通过省略初始化语句和后置语句,实现 while 语句
for ; sum < 1000; {
sum += sum
}
分号可省略。IDE 都觉得冗余,会直接给你在格式化时去掉
for sum < 1000 {
sum += sum
}
无限循环
靠 break 结束循环
for {
if condition1 {
break
}
}
for-range
遍历数组,切片,字符串,Map 等
for index, char := range MyString {
}
for key, value := range MyMap {
}
for index, value := range MyArray {
}
注意:如果 for range 遍历指针数组,则 value 取出的指针地址为原指针地址的拷贝