1、if [if--else] [if--else if--else] 等流程控制语句
--if 的基本控制结构语法:
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else{
分支3
}
--if 示例1:
--这种形式下,变量定义在if 外部
score := 65
if score >= 90 {
fmt.Println("A")
} else if score > 75 {
fmt.Println("B")
} else {
fmt.Println("C")
}
--if 示例2:
--这种形式下,变量定义在if 的判断条件里面
--可以在跳出判断时销毁变量,减少内存消耗
if score := 99; score < 100 {
fmt.Println("分数低于100")
} else if score == 100 {
fmt.Println("正好满分")
} else {
fmt.Println("分数无效")
}
--if 示例3:
s1 := 17
if s1 >= 18 {
s2 := "我成年了"
fmt.Println(s2)
} else if s1 < 17 {
fmt.Println("没成年啦 阿sir")
} else {
fmt.Println("不论怎么样都要好好学习啦")
}
--if的特殊写法 ---- 变量定义在和条件判断一行:
--特殊写法:变量申明放在条件判断的那一行,这样变量就不能在其他地方使用,但也节约了空间
if s1 := 17; s1 >= 18 {
s2 := "我成年了"
fmt.Println(s2)
} else if s1 < 17 {
fmt.Println("没成年啦 阿sir")
} else {
fmt.Println("不论怎么样都要好好学习啦")
}
fmt.Println(s1) # 这里由于s1放在条件一行,会报错提示没有定义s1变量
2、for 循环
--go语言中没有其他循环,只有for循环及其变种
--形式1:最基本的
for i := 0; i < 10; i++ {
fmt.Println(i)
}
--形式2:循环变量定义在循环体之外
i := 0
for ; i < 10; i++ {
fmt.Println(i)
}
fmt.Println(i)
// 这种定义的好处是可以拿出最后循环次数,便于进一步处理
--形式3:这种循环的好处是可以在循环体内处理循环的次数
i := 0
for i < 10 {
fmt.Println(i)
i++
}
fmt.Println(i)
--形式4:无限循环
for{
fmt.Println("无限循环")
}
// for循环可以通过break、goto、return、panic语句强制退出循环
03、for range:这个就有意思了,只要学过python都能很快明白这个
--这里for range可以遍历数组、切片、字符串、map 及通道(channel)
--通过for range遍历的返回值有以下规律:
--数组、切片、字符串返回索引和值。
--map返回键和值。
--
--代码示例如下:
// for range循环
s := "liming沙河"
for i, v := range s {
fmt.Printf("%d %c\n", i, v)
}
************ 输出结果 ****************
0 l
1 i
2 m
3 i
4 n
5 g
6 沙 // 注意中文占三个位置
9 河 // 英文占一个位置
04、for 循环终端 break continue
--代码示例如下:
for i := 0; i < 15; i++ {
if i >= 5 {
break
}
fmt.Println("今天是个好天气")
}
fmt.Println("over")
****************** break 输出 *******************
今天是个好天气
今天是个好天气
今天是个好天气
今天是个好天气
今天是个好天气
over
--代码示例如下:
for i := 0; i < 8; i++ {
if i == 5 {
continue
}
fmt.Printf("今天是个好天气 %d\n", i)
}
fmt.Println("over")
**************** continue 示例如下 *******************
今天是个好天气 0
今天是个好天气 1
今天是个好天气 2
今天是个好天气 3
今天是个好天气 4
今天是个好天气 6
今天是个好天气 7
over
--死循环又一案例:这种方式会导致i始终不会超过5,因为被跳过去了导致一直为5
for i := 0; i < 8; {
if i == 5 {
continue
}
fmt.Printf("今天是个好天气 %d\n", i)
i++
}
fmt.Println("over")
05、switch case
--基础形式的代码示例:
var n = 6
switch n {
case 1:
fmt.Println("我是大拇指")
case 2:
fmt.Println("我是食指")
case 3:
fmt.Println("我是中指")
case 4:
fmt.Println("我是无名指")
case 5:
fmt.Println("我是小拇指")
default:
fmt.Println("无效的数字")
}
--变种形式1:变量定义在switch后面
switch n := 3; n {
case 1:
fmt.Println("我是大拇指")
case 2:
fmt.Println("我是食指")
case 3:
fmt.Println("我是中指")
case 4:
fmt.Println("我是无名指")
case 5:
fmt.Println("我是小拇指")
default:
fmt.Println("无效的数字")
}
--变种形式2:case后面加上多个值
switch n := 3; n {
case 1, 3, 5, 7, 9:
fmt.Println("我是奇数")
case 2, 4, 6, 8, 10:
fmt.Println("我是偶数")
default:
fmt.Println("无效的数字")
}
--变种形式3: case后面接上判断条件
n := 3
switch {
case n < 25:
fmt.Println("好好学习")
case n >= 25 && n < 40:
fmt.Println("好好工作")
default:
fmt.Println("享受生活")
}
--变种形式4: fallthrough 这里不做叙述不用了,go向前兼容不要再写这个语法了
--fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。
s := "a"
switch {
case s == "a":
fmt.Println("a")
fallthrough
case s == "b":
fmt.Println("b")
case s == "c":
fmt.Println("c")
default:
fmt.Println("...")
}
*************** fallthrough 输出结果 ****************
a
b
06、goto语法
--goto不要再写了,以后也不用了,仅作为了解
--代码示例:关于多层循环的一个实例,break只能退出一层循环
for i := 0; i < 6; i++ {
for j := 'A'; j <= 'Z'; j++ {
if j == 'C' {
break
}
fmt.Printf("%d-%c\n", i, j)
}
}
******************* break基础使用 ********************
0-A
0-B
1-A
1-B
2-A
2-B
3-A
3-B
4-A
4-B
5-A
5-B
--代码示例02:break想要彻底退出需要加标志位
var flag = false
for i := 0; i < 6; i++ {
for j := 'A'; j <= 'Z'; j++ {
if j == 'C' {
flag = true
break
}
fmt.Printf("%d-%c\n", i, j)
}
if flag {
fmt.Println("彻底退出")
break
}
}
******************* break 彻底退出 ********************
0-A
0-B
彻底退出
--代码示例:goto可以到达任意位置,不像break只能退出一层循环
for i := 0; i < 6; i++ {
for j := 'A'; j <= 'Z'; j++ {
if j == 'C' {
goto XX
}
fmt.Printf("%d-%c\n", i, j)
}
}
XX:
fmt.Println("over")
******************* goto ********************
0-A
0-B
over
07、99乘法表实现
--