5.流程控制
格式化字符串
5.1if
语句
score := 91
if score >=90 {
fmt.Println("90+")
} else if score < 80 {
fmt.Println("80+")
} else {
fmt.Println("harder")
}
}
这上下两种写法, 有区别, 和其他语言一样,可以想象,下面的写法中的score
不能被外面引用
if score := 91; score >= 90 {
fmt.Println("90+")
} else if score < 80 {
fmt.Println("80+")
} else {
fmt.Println("harder")
}
}
5.2for
循环
5.2.1初始语句省略的话,初始语句后面的分号不要落了
`
for 初始语句;条件表达式;结束语句{
循环体语句
}`
for i := 0; i < 10; i++ {
fmt.Println(i)
}
//初始语句省略的话,初始语句后面的分号不要落了
for ; i < 10; i++ {
fmt.Println(i)
}
5.2.1初始语句和结束语句都可以省略
var i = 0
for i < 10 {
fmt.Println(i)
i++
}
5.2.3range
可以使用for range
遍历数组、切片、字符串、map 及通道(channel)。 通过for range
遍历的返回值
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值
var s = "iamxiaosheng"
for index, item := range s {
fmt.Println(index, ",", string(item))
}
5.3switch case
switch
一个分支可以有多个值,多个case值中间使用英文逗号分隔
var j int = 1
switch j {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
case 3:
fmt.Println("4")
}
var age = 29
switch age {
case 28, 27, 26:
fmt.Println("26+")
case 24, 25:
fmt.Println("24-26")
default:
fmt.Println("default")
}
fallthrough可以实现执行满足条件的case的下一个case
eg:
for i := 1; i < 10; i++ {
for j := 1; j <= i; j++ {
fmt.Print(i, "x", j, "=", i*j, ";\t")
}
fmt.Println()
}
break
语句可以结束for
、switch
和select
的代码块。
func main() {
BREAKCODE:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
fmt.Println(i, ",", j)
if j == 3 {
fmt.Println("3")
break BREAKCODE
}
}
}
fmt.Print("break code ")
}
go
不像java
,他需要关键字才往下穿透
5.4goto
func gotoDemo2() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
// 设置退出标签
goto breakTag
}
fmt.Printf("%v-%v\n", i, j)
}
}
return
// 标签
breakTag:
fmt.Println("结束for循环")
}