go中只有一种循环控制结构, for。 没有do或while循环。
Go的循环有三种形式,只有其中的一种使用分号
for init; condition;post { } //普通的循环
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
for condition {} //和while一样
for {} //死循环
break和continue
- break可提前退出循环,终止当前的循环, 也可在break后指定标签, 用标签决定哪个循环被终止
//break可提前退出循环,终止当前的循环
for i := 0 ; i < 10 ; i++ {
i f i > 5 {
break 终止这个循环,只打印 0 到 5
}
println(i)
}
//当嵌套循环时,可在break后指定标签, 用标签决定哪个循环被终止
J: for j:=0; j < 5; j++ {
for i:= 0; i < 10; i++ {
if i > 5 {
break J
}
println(i)
}
}
- 利用 continue 让循环进入下一个迭代,而略过剩下的所有代码
for i := 0; i < 10; i++ {
if i > 5 {
continue
}
println(i)
}
- range 是迭代器,可用于循环, 用于slice, array, map, channel, string
//当对slice和array循环时 range返回序号做键,序号对应的内容做值
list := []string{"a", "b", "c", "d", "e", "f"}
for k, v := range list {
//dosomething
}
//可字符串上直接使用 range
for pos, char := range "aΦx" {
fmt.Printf("character '%c' starts at byte position %d\n", char, pos)
}
go的条件判断结构
- switch结构
go的switch非常灵活,表达式不必是常量或者整数, 执行过程自上而下,直到找到匹配项。如果switch没有表达式,会匹配true
func unhex(c byte) byte {
switch {
case '0' <= c && c <= '9':
return c - '0'
case 'a' <= c && c <= 'f':
return c - 'a' + 10
case 'A' <= c && c <= 'F':
return c - 'A' + 10
}
return 0
}
switch不会匹配失败后自动向下尝试,但是可以使用 fallthrough 使其这样做
//没有使用fallthrough
switch i {
case 0: // 空的 case 体
case 1:
f() // 当 i == 0 时, f 不会被调用!
}
//有使用fallthrough
switch i {
case 0: fallthrough
case 1:
f() // 当 i == 0 时, f 会被调用!
}
用default 可以指定当其他所有分支都不匹配的时候的行为。
switch i {
case 0:
case 1:
f()
default:
g() // 当 i 不等于 0 或 1 时调用
}
- if 结构
//if-else
if age >= 18 {
fmt.Println("成年")
} else {
fmt.Println("未成年")
}
//if 和 switch 接受初始化语句,通常用于设置一个(局部)变量。
if !false {
fmt.Println("true")
}
f, err := os.Open(filename, os.O_RDONLY, 0)
if err != nil {
return err
}
dosomething(f)
有疑问加站长微信联系(非本文作者)