控制语句分类
顺序:先执行a,再执行b
选择:如果。。。,则。。。
循环:如果。。。,则再继续
if条件表达式
if 条件表达式{
代码逻辑
}
条件表达式左右的()可以不写,也建议不写
if和表达式中间一定要有空格
在Go中{ }是必须有的
在golang里,if后面可以并列的加入变量的定义
package main
import "fmt"
func main() {
// if num := 10; num < 30 {
// fmt.Println("对不起,余额不足")
// }
if abs := 20; abs > 10 {
fmt.Println("余额充足,请刷卡")
}
}
if 条件表达式{
逻辑代码1
} else{
逻辑代码2
}
当表达式成立时执行逻辑代码1,不成立时执行逻辑代码2。{}也是必须有
if 条件表达式1{
逻辑代码1
}else if 条件表达式2{
逻辑代码2
}else if 条件表达式3{
逻辑代码3
}
var num int
fmt.Println("请输入学生成绩:")
fmt.Scanln(&num)
if num >= 90 {
fmt.Println("成绩等级为A")
} else if num >= 80 {
fmt.Println("成绩等级为B")
} else if num >= 70 {
fmt.Println("成绩等级为C")
} else if num >= 60 {
fmt.Println("成绩等级为D")
} else {
fmt.Println("成绩等级为E")
}
switch 表达式{
case 值1,值2,。。。
语句块
case 值3,值4,。。。
语句块
default
语句块
}
switch num / 10 {
case 10, 9:
fmt.Println("成绩等级为A")
case 8:
fmt.Println("成绩等级为B")
case 7:
fmt.Println("成绩等级为C")
case 6:
fmt.Println("成绩等级为D")
default:
fmt.Println("成绩等级为E")
}
1.switch后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
2.case后面的值如果是常量值(字面量),则要求不能重复
3.case后的各个值的数据类型,必须和 switch 的表达式数据类型一致
4.case后面可以带多个值,使用逗号间隔。比如 case 值1,值2...
5.case后面不需要带break
6.default语句不是必须的,位置也是随意的。
7.switch后也可以不带表达式,当做if分支来使用
8.switch后也可以直接声明/定义一个变量,分号结束,不推荐
9.switch穿透,利用fallthrough关键字,如果在case语句块后增加fallthrough ,则会继续执行下一个case,也叫switch穿透。
for
for 初始表达式;布尔表达式(条件判断);迭代因子{
循环体(重复执行的语句)
}
1、初始表达式不可用var定义,要用:=2、for循环无法提高底层效率,只能让程序员写代码变得更加整洁
3、条件不满足时终止,条件满足时输出
package main
import "fmt"
func main() {
//实现功能,求和1+2+3+ +100
var sum int = 0
for i := 1; i <= 100; i++ {
sum += i
//i++
}
fmt.Println(sum)
}
格式灵活,在控制台中结束死循环ctrl+c
for range结构是Go语言特有的迭代结构
for range可以遍历数组、切片、字符串、map及通道,形式为:
for key,val := range coll{
}
//Printf : 可打印出格式化的字符串,Println不行;
package main
import "fmt"
func main() {
var str string = "Hello golong"
//普通for循环
// for i := 0; i < len(str); i++ {
// fmt.Println(str[i])
// }
for i := 0; i < len(str); i++ { //i:理解为字符串的下标
fmt.Printf("%c \n", str[i])
}
}
}
Printf : 可打印出格式化的字符串,Println不行;
关键字
break
1、在switch分支中,每个case分支后都用break结束分支,但是在go语言中break可以省略不写
2、break可以用来结束正在执行的循环,其作用为结束离它最近的循环
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
for j := 2; j <= 4; j++ { //循环到j=4
//fmt.Println("i: ", i, "j: ", j)
fmt.Printf("i: %v , j: %v \n", i, j)
if i == 2 && j == 2 {
break
} //当i=2,j=2时跳出离他最近的循环
} //跳出的就是这个循环
}
}
//输出结果
// i: 1 , j: 2
// i: 1 , j: 3
// i: 1 , j: 4 //j=4时结束j循环,再次进入i循环(仅为个人理解,可能表达不当)
// i: 2 , j: 2 //因为i=2,j=2时跳出了包含j++的for循环,直接进入i++的循环,所以下一个为i=3,j=2
// i: 3 , j: 2
// i: 3 , j: 3
// i: 3 , j: 4
// i: 4 , j: 2
// i: 4 , j: 3
// i: 4 , j: 4
// i: 5 , j: 2
// i: 5 , j: 3
// i: 5 , j: 4
label 标签
package main
import "fmt"
func main() {
//双重循环:
label2://在此处设计一个标签的话会从if语句直接跳出所有循环,输出ok
for i := 1; i <= 5; i++ {
//label2:
for j := 2; j <= 4; j++ {
fmt.Printf("i: %v, j: %v \n", i, j)
if i == 2 && j == 2 {
break label2 //结束指定标签对应的循环
}
}
}
fmt.Println("-----ok")
}
//设计label可以用于break label直接跳出多个循环,在某些情况下会让问题变得更加简单
continue 结束本次循环进入下一次循环
package main
import "fmt"
//输出1-100之间可以整除6的数
func main() {
for i := 1; i <= 100; i++ {
if i%6 != 0 {
continue //continue可以结束本次循环直接进入下一次循环
//在本题中,如果i的值不能整除6,则不用输出i的值直接进入下一次循环
//continue在英文中可以翻译为中断后再继续
}
fmt.Println(i)
}
}
package main
import "fmt"
func main() {
for i := 1; i <= 4; i++ {
for j := 2; j <= 4; j++ {
if i == 2 && j == 2 {
continue
}//i=2,j=2时结束了离他最近的循环,因此没有输出i=2,j=2
fmt.Printf("i: %v , j: %v\n", i, j)
}
}
}
package main
import "fmt"
label:
for i := 1; i <= 4; i++ {
for j := 2; j <= 4; j++ {
if i == 2 && j == 2 {
continue label
//终止本次循环,跳回到label
}//i=2,j=2时终止了两层循环,因此没有输出i=2,j=2
//进入新的循环后输出i=3,j=2
fmt.Printf("i: %v , j: %v\n", i, j)
}
}
fmt.Println("------ok")
}
goto语句
1、在go语言中,goto语句可以无条件的转移代程序中的指定行
2、goto语句通常与条件语句配合使用。可以用来实现条件转移
3、在go程序中不建议使用goto语句,以免造成程序流程的混乱
package main
import "fmt"
func main() {
fmt.Println("hello golang1")
fmt.Println("hello golang2")
if 1 == 1 {
goto label1 //goto一般配合条件结构一起使用
}
fmt.Println("hello golang3")
fmt.Println("hello golang4")
fmt.Println("hello golang5")
fmt.Println("hello golang6")
label1:
fmt.Println("hello golang7")
fmt.Println("hello golang8")
fmt.Println("hello golang9")
}
// 输出为:
// hello golang1
// hello golang2
// hello golang7
// hello golang8
// hello golang9
return 结束当前函数
package main
import "fmt"
//输出1-100中小于等于14的数,并在末尾输出hello golang
func main() {
for i := 1; i <= 100; i++ {
fmt.Println(i)
if i == 14 {
return //结束当前的函数
}
}
fmt.Println("hello golang")
}