这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战
switch
方式1 switch expr {}
// switch后跟一个变量, case后跟常量
season := 1
switch season {
case 1:
fmt.Println("现在是春天")
case 2:
fmt.Println("现在是夏天")
case 3:
fmt.Println("现在是秋天")
case 4:
fmt.Println("现在是冬天")
default:
fmt.Println("我不知道这是什么季节")
}
// 多值判断, 在每个case中也可以进行多个值的匹配
switch season {
case 1, 2:
fmt.Println("充满生机")
case 3, 4:
fmt.Println("西风落叶")
default:
fmt.Println("啥都不是")
}
方式2 switch {}
// switch后没有值, case后跟条件判断
score := 80
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 80:
fmt.Println("良好")
case score >= 70:
fmt.Println("及格")
default:
fmt.Println("不合格的分数")
}
for
方式1
/*
格式
for expr1; expr2; expr3 {}
expr1: 一般初始化循环体中用到的变量, 指定初始值
expr2: 一般进行条件的判断, 不满足条件的话, 循环结束
expr3: 一般进行循环条件的修改
*/
for i := 0; i < 10; i++ {
fmt.Println(i * 10)
}
方式2
/*
expr1: 一般用于条件判断, 条件不满足, 循环结束
for expr1 {}
一般在for语句外初始化变量
在for循环体内进行条件的修改
*/
i := 0
for i < 10 {
fmt.Println(float64(i) * (1.5))
i++
}
格式3
/*
for循环外面, 进行条件变量的初始化
for循环内部, 进行条件的修改和判断
条件不成立, 使用break跳出循环
for {}
*/
for {
if i == 20 {
break
}
fmt.Println(i)
i++
}
格式4
/*
for循环 多个条件的判断和修改
*/
arr := []int {1, 2, 3, 4, 5}
fmt.Println(arr)
// 利用for循环和Go语言特性进行数组的翻转
for i, j := 0, len(arr) - 1; i < j; i, j = i + 1, j - 1 {
arr[i], arr[j] = arr[j], arr[i]
}
fmt.Println(arr)
ragne
/*
注意: range语句中遍历得到的值, 都是该集合中的副本
对其的修改操作, 不会影响到原集合中的内容
*/
// 遍历切片
s := []int {1, 3, 5, 7}
for i, v := range s {
fmt.Println("元素位置: ", i, "元素值: ", v)
}
// 遍历map
m := map[string]int {"shaosiming":18, "dasiming":20}
for k, v := range m {
fmt.Println("key: ", k, ", value: ", v)
}
// 遍历字符串
str := "Hi, gopher"
for i, c := range str {
fmt.Println("字符所在位置: ", i, "字符: ", string(c))
}
if
格式1 if expr {}
if true {
fmt.Println("你永远都是对的")
}
格式2 if expr {} else {}
c := "女"
if c == "男" {
fmt.Println("一起去打球!")
} else {
fmt.Println("一起去看电影")
}
格式3 if expr1 {} else if expr2 {} else {}
weather := "夏天"
if weather == "春天" {
fmt.Println("一起去踏青")
} else if weather == "夏天" {
fmt.Println("一起去冲浪")
} else if weather == "秋天" {
fmt.Println("一起去荡秋千")
} else if weather == "冬天" {
fmt.Println("一起去滑雪")
} else {
fmt.Println("我也不知道了")
}
break语句的使用
/*
不管何时何地, 跳出本层循环
也就是说当有两层循环时, 如果在内层循环使用了break, 只会跳出内层循环
*/
for i := 0; i < 10; i++ {
fmt.Println("外层i的值: ", i)
for j := 0; j < 10; j++ {
if j == 5 {
break
}
fmt.Println("内层j的值: ", j)
}
}
continue语句的使用
/*
不管何时何地, 结束当前循环体中的语句执行
进入当前循环的下一次循环中
*/
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
// 不想打印3, 5的值
if j == 3 || j == 5 {
continue
}
fmt.Println("内层j的值为: ", j)
}
fmt.Println("外层i的值为: ~~~~~~", i)
}
标签的使用
// 防止程序的死循环
count := 0
// 标签名: 下面的程序代码, 可以选择跳转到这里
TAG:
fmt.Println("执行for循环的次数: ", count)
for i := 0; i < 5; i++ {
// 当i的值=3的时候, 跳转到TAG这里, 再向下执行
// 当跳转5次之后, 就不再跳转了
if i == 3 && count < 5 {
count ++
goto TAG
}
fmt.Println(i)
}
总结
Go中的switch语句也去掉了break的强制使用, case支持多值判断, 也简便了很多. Go中的for循环使用更加灵活, 没有明确的格式限制, 结合Go的平行赋值, 更好使用. Go中的range语句简直不要太方便, 我们可以轻轻松松遍历一个集合类型的数据.