流程控制
选择结构
if
if 布尔表达式{
}
Demo1
a := 2
if a > 0 {
fmt.Println(a)
}
结果
2
if语句中可以添加变量初始化语句,用分号;
分割,即:
if a := 2; a > 0 {
fmt.Println(a)
}
结果
2
注意点
go和其它语言有些小区别需要注意一下:
- 不需要使用括号包裹布尔判断语句
- 无论主体部分有几行,都必须要有
{}
- 左
{
必须和if或else在同一行上 - if语句中可以添加变量初始化语句
- 布尔判断语句只有true和false,在其他语言中非0即1,但Go中判断一个值则会报错
if-else
if 布尔表达式{
}else{
}
if-else-if
if condition1 {
// do something
} else if condition2 {
// do something else
} else {
// catch-all or default
}
switch
switch var1 {
case val1:
...
case val2:
...
default:
...
}
case可以使条件表达式,并且在switch后无需加上参数
package main
import "fmt"
func main() {
score := 90
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 80 && score < 90:
fmt.Println("良好")
default:
fmt.Println("及格")
}
}
结果:
优秀
fallthrough
使用fallthrough,可以再向下执行一个case
package main
import "fmt"
func main() {
a := 100
switch a {
case 100:
fmt.Println("100")
fallthrough
case 200:
fmt.Println("200")
case 300:
fmt.Println("300")
}
}
结果:
100
200
循环结构
for
for 初始化语句; 条件语句; 修饰语句 {
循环体语句
}
Go的for条件不需要打括号
for i := 1; i <= 10; i++ {
fmt.Printf("%v ", i)
}
结果:
1 2 3 4 5 6 7 8 9 10
初始条件和结束条件可省略(个人感觉类似于while循环)
i := 1 //初始条件
for i <= 10 {
fmt.Printf("%v ", i)
i++ //结束条件
}
死循环
for {
fmt.Printf("run.....\n")
}
for-range
Go语言中可以使用for range遍历数组、切片、字符串、map及通道(channel)。通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
var str string = "Sentiment"
for pos, char := range str {
fmt.Printf("%d : %c \n", pos, char)
}
pos为索引,char为值
结果
0 : S
1 : e
2 : n
3 : t
4 : i
5 : m
6 : e
7 : n
8 : t
如果只想获得索引,可以忽略第二个变量:
arr := [...]int{7, 8, 9}
for i := range arr {
fmt.Println(i)
}
结果:
0
1
2
若只想输出值,索引处可以用_代替
arr := [...]int{7, 8, 9}
for _, i := range arr {
fmt.Println(i)
}
结果:
7
8
9
break
break语句可以结束for、switch和select 的代码块。
break结束for循环
for i := 1; i <= 5; i++ {
fmt.Println(i)
if i >= 3 {
break
}
}
结果:
1
2
3
break可用于结束fallthrough
i := 2
switch i {
case 1:
fmt.Println(1)
case 2:
fmt.Println(2)
break
fallthrough
case 3:
fmt.Println(3)
}
结果:
2
若不加break,则会继续执行case 3 输出3
continue
结束本次循环进入下一轮循环