1. 分支结构
1.1. if 单分支结构
package main
import "fmt"
func main() {
var count int = 20
// 单分支结构 if 表达式 {....} 区别java 表达式的() 建议省略
// 表达式为true 执行 {} 中的内容 表达式为false {}中的代码不执行
if count < 30 {
fmt.Println("对不起 口罩库存不足")
}
//在golang中,if后面可以并列加入变量的定义 变量定义和表达式使用 英文分号 分隔
if count2 := 20; count2 < 30 {
fmt.Println("对不起 口罩库存不足")
}
}
1.2. if-else 双分支结构
package main
import "fmt"
func main() {
// 双分支结构
// 表达式为 true 执行 if后边 {} 中的内容,表达是为false 执行 else {} 中的内容
if count := 30; count < 30 {
fmt.Printf("库存充足")
} else { //else必须跟在if的 花括号后边,不能换行,换行会报错
fmt.Printf("库存不足")
}
}
1.3. if- else if -else多分支结构
package main
import "fmt"
func main() {
var score int = 77
// 多个分支
// 只会执行第一个为true的分支,后续代码阻断执行
if score >= 90 {
fmt.Println("您的成绩为A级别")
} else if score >= 80 {
fmt.Println("您的成绩为B级别")
} else if score >= 70 {
fmt.Println("您的成绩为C级别")
} else if score >= 60 {
fmt.Println("您的成绩为D级别")
} else {
fmt.Println("您的成绩为E级别")
}
}
1.4. switch分支
package main
import "fmt"
func main() {
var score int = 66
// switch 后边跟表达式\常量\变量\有返回值函数,表达式不需要加(),表达式的结果依次跟case比较,满足结果执行:后边的代码
//case 后边跟常量 要求不能重复
//case 后边跟变量 要求数据类型需要一致
//case 后边可以跟多个值,使用逗号分隔
//case 区别于java不需要 break 关键字预防case穿透
// default 兜底分支 不是必须的
switch score / 10 {
case 10:
fmt.Println("您的等级为A级")
case 9:
fmt.Println("您的等级为B级")
case 8:
fmt.Println("您的等级为C级")
case 7, 6:
fmt.Println("您的等级为D级")
default:
fmt.Println("您的等级为E级")
}
// switch 可以不带表达式,case后边跟bool表达式,当if分支使用
var b int = 10
switch {
case b == 1:
fmt.Println("case b == 1")
case b == 2:
fmt.Println("case b == 2")
default:
fmt.Printf("default:%v", b)
}
//switch 后边可以直接声明变量 使用英文分号结束,case 后需要跟和这个变量相关的 bool 表达式
switch c := 7; {
case c > 1:
fmt.Println("switch c := 7;")
}
//使用 fallthrough 达到case穿透的效果,只穿透他所在的case
switch c := 7; {
case c > 7:
fmt.Println("switch c := 7;")
fallthrough
case c > 6:
fmt.Println("fallthrough")
case c > 5:
fmt.Println("fallthrough")
}
}
2. 循环结构
2.1. for循环
package main
import "fmt"
func main() {
/**
for循环语法格式: for 初始表达式;布尔表达式;迭代因子{循环体......}
for的初始表达式 必须使用 :=的格式赋值,不能使用var
*/
var sum int
for i := 0; i < 10; i++ {
sum += i
}
fmt.Printf("sum最终的值为:%d", sum)
}
2.2. for range循环
package main
import "fmt"
func main() {
// 普通for循环按照字节进行遍历 “你好”中文会乱码
var str string = "hello golang你好"
for i := 0; i < len(str); i++ {
fmt.Printf("%c \n", str[i])
}
//for range 可以遍历数组、切片、字符串、map及通道
// for range语法 for key val:= range 变量名
// 遍历str,遍历的每个结果下标被key接收,遍历的结果具体数值被value接收
for key, value := range str {
fmt.Printf("索引为:%d,值为:%c \n", key, value)
}
}
3. 循环控制
break:结束当前循环
continue:跳过本次循环,继续下一次循环
return:结束本次运行
goto:goto 跳转到指定行代码,配合标签使用,不建议使用
package main
import (
"fmt"
)
func main() {
/**
break 结束循环
*/
var sum int = 0
for i := 0; i <= 100; i++ {
sum += i
fmt.Println(sum)
if sum >= 300 {
break
}
}
fmt.Println("-----------ok")
/*
break 标签 结束对应标签的循环
*/
lable1:
for i := 0; i < 100; i++ {
lable2:
for j := 0; j < 100; i++ {
if i+j > 100 {
break lable2
}
if i > 50 {
break lable1
}
}
}
/*
continue 跳过本次循环,继续下次循环 ,也可以加标签
*/
for i := 0; i < 100; i++ {
if i%6 != 0 {
continue
}
fmt.Println(i)
}
/*
goto 跳转到指定行代码,配合标签使用,不建议使用
*/
/*
return 结束程序执行
*/
}