if语句
- 条件语句不需要()
- 支持一个初始化表达式,如 i:=0
- 语句中的变量会覆盖外部语句的同名变量
func main() {
a := 1
if a := 0; a < 1 {
fmt.Println(a)
}
fmt.Println(a)
}
打印结果为:0 1
for语句
- go只有for一个循环语句关键字,但有三种形式
- 初始化和步进表达式可以是多个值
- 条件语句每次循环都会重新判断,尽量使用变量或常亮判断,避免函数
func main() {
a := 0
for {//for的第一种形式,无限循环,手动break
a++
if a > 5 {
break
}
fmt.Println(a)
}
fmt.Println("over")
}
func main() {
a := 0
for a < 3 {//for的第二种形式,后面跟着判断语句
fmt.Println(a)
a++
}
fmt.Println("over")
}
func main() {
str := "abc"
for a, len := 0, len(str); a < len; a++ {//for的第三种形式,并优化了判断语句
fmt.Println(a)
}
fmt.Println("over")
}
switch语句
- 可以使用任何类型和表达式作为条件语句
- 不需要写break,条件符合自动终止
- 如果希望继续执行下一个case,最后添加fallthrough语句,使用了fallthrough语句后,会跳过case的判断,直接执行下一条的代码内容
- 支持一个初始化表达式,可以是并行方式,但右侧需要添加分号
func main() {
a := 3
switch {
case a > 0:
fmt.Println("a>0")
fallthrough
case a > 1:
fmt.Println("a>1")
case a > 2:
fmt.Println("a>2")
}
switch a {
case 3:
fmt.Println("a=" + strconv.Itoa(a))
fallthrough
case 1:
fmt.Println("a=" + strconv.Itoa(a))
fallthrough
case 4:
fmt.Println("a=" + strconv.Itoa(a))
}
switch b := 1; {
case b >= 1:
fmt.Println("b>=1")
fallthrough
case b >= 3:
fmt.Println("b>=3")
}
}
goto/break/continue
- 三个语句都可以配合标签使用
- 标签名区分大小写
- break与continue配合标签可用于多层循环的跳出
- goto是调整执行位置,与其他2个语句配合标签的结果并不相同
func main() {
tag1:
for {
for i := 0; i < 10; i++ {
fmt.Println(i)
if i > 5 {
//break 单独的break指跳出当前for循环层级,代码继续死循环
break tag1 //-->跳出循环到tag1标签的层级
}
}
}
fmt.Println("over")
}
func main() {
for {
for i := 0; i < 10; i++ {
fmt.Println(i)
if i > 5 {
goto tag1 //-->调整执行位置到tag1标签
}
}
}
tag1:
fmt.Println("over")
}
func main() {
tag1:
for i := 0; i < 10; i++ {
fmt.Println(i)
for {
continue tag1//跳到上一层的有限循环继续执行
}
}
fmt.Println("over")
}
直通车
一.Go开发工具及命令
二.Go编程基础知识
三.Go的类型与变量
四.Go常量与运算符
五.Go控制语句
六.Go数组
七.Go切片slice
八.Go哈希字典map
九.Go函数func
十.Go结构struct