Go语言系列-03-流程控制语句
2021-03-20 03:26
标签:shell 查找 als 不执行 打印 undefined for死循环 年轻人 class Go语言中最常用的流程控制语句有 作用域:变量可以使用的范围 局部变量:函数内部、或者流程控制语句内部定义的变量,就叫做局部变量。局部变量在哪里定义,就只能在该范围内使用,如果在其他范围使用,则会报错 全局变量:在函数、流程控制语句等外部定义的变量,就叫做全局变量。所有范围都可以使用全局变量。 变量作用域查找顺序:遵循LEGB原则(和Python一样) switch语句主要是用来简化大量的判断,一个变量和具体的值作比较 goto语句用来跳转到指定的标签位置,不建议使用,会影响代码的可读性 如果要跳出多层for循环,用标记位 Go语言系列-03-流程控制语句 标签:shell 查找 als 不执行 打印 undefined for死循环 年轻人 class 原文地址:https://www.cnblogs.com/lichengguo/p/13932773.htmlGo语言流程控制语句
if
和 for
,没有像Python中的while语句。另外,Go语言还有switch
和goto
语句,不过这两个主要是用来简化代码的,属于扩展类的流程控制,使用率没有if
和for
多。if语句
if语句的基本格式
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else {
分支3
}
// 表达式1为true时,执行分支1
// 表达式1为false时。判断表达式2,为true则执行分支2
// 如果表达式1和表达式2都为false时,执行分支3
if 单分支
package main
import (
"fmt"
)
func main() {
// 声明一个变量
alnkAge := 18
if alnkAge >= 18 {
// 条件满足走这个分支
fmt.Println("年轻人")
}
// 代码从上到下执行
fmt.Println("代码执行结束")
}
lichengguo@lichengguodeMacBook-Pro % go run main.go
年轻人
代码执行结束
if-else 双分支
package main
import (
"fmt"
)
func main() {
// 声明一个变量
alnkAge := 17
if alnkAge >= 18 {
// 条件满足走这个分支
fmt.Println("年轻人")
} else {
// 如果上一个条件不满足,则走这个分支
fmt.Println("小孩子")
}
// 代码从上到下执行
fmt.Println("代码执行结束")
}
lichengguo@lichengguodeMacBook-Pro % go run main.go
小孩子
代码执行结束
if-else if-else 多分支
package main
import (
"fmt"
)
func main() {
// 声明一个变量
alnkAge := 17
if alnkAge >= 35 {
// 条件满足走这个分支
fmt.Println("中年人")
} else if alnkAge >= 18 {
// 如果上一个条件不满足,则走这个分支
fmt.Println("骚年")
} else {
// 如果前面2个条件都不满足,则走这个分支
fmt.Println("学生")
}
// 代码从上到下执行
fmt.Println("代码执行结束")
}
lichengguo@lichengguodeMacBook-Pro % go run main.go
学生
代码执行结束
其他的if情况
package main
import (
"fmt"
)
func main() {
// 在if语句这一行先声明一个变量,然后在进行判断
// 这里涉及到一个新知识点 变量作用域
// 此时的 变量alnkAge 只在if语句这个作用域内有效
if alnkAge := 18; alnkAge > 18 {
fmt.Println("大于18岁")
} else {
fmt.Println("学生")
}
// fmt.Println(alnkAge) // 会报错 undefined: alnkAge
}
package main
import (
"fmt"
)
// 全局变量的定义
//name1 := "Alnk" // 全局变量的定义不支持简短声明
var name1 = "Alnk" // 定义一个全局变量
// 在函数内部定义一个局部变量
func test() {
// 定义一个局部变量
var name2 = "Alnk2"
fmt.Println(name2)
}
func main() {
fmt.Println(name1) // 在 main 函数内部使用全局变量
// 在 main 函数中不能使用 test 函数定义的局部变量。因为不在同一个作用域
//fmt.Println(name2)
}
for语句
for循环语句的基本格式
for 初始语句; 条件表达式; 结束语句 {
循环体语句
}
// 条件表达式为true时,会一直循环,知道条件表达式为false时,退出循环
基本循环格式
package main
import (
"fmt"
)
// 最常用的for循环格式
func main() {
// 基本循环格式
for i := 0; i
异形格式1
package main
import (
"fmt"
)
// 这种格式不常用
func main() {
// 复习一下作用域
i := 5
for ; i
异形格式2
package main
import (
"fmt"
)
func main() {
// 不常用
i := 5
for i
for死循环
package main
import (
"fmt"
)
// 比较常用
// 用来hang住程序,不让程序退出
// ctrl+c 退出程序
func main() {
for {
fmt.Println("Alnk")
}
}
for range 循环
package main
import (
"fmt"
)
// 常用
func main() {
s := "hello,你好"
for index, value := range s {
fmt.Printf("%d - %c\n", index, value)
}
}
跳出for循环
break
package main
import (
"fmt"
)
func main() {
// 当i=5时就跳出for循环
for i := 0; i
continue
package main
import (
"fmt"
)
func main() {
// 当i=5时,跳过此次for循环(不执行for循环内部的打印语句),
// 继续下一次循环
for i := 0; i
switch语句
单个值匹配
package main
import (
"fmt"
)
func main() {
//n := 2
//if n == 1 {
// fmt.Println("1")
//} else if n == 2 {
// fmt.Println("2")
//} else if n == 3 {
// fmt.Println("3")
//} else if n == 4 {
// fmt.Println("4")
//} else if n == 5 {
// fmt.Println("5")
//} else {
// fmt.Println("No")
//}
// 可以看出上面的if-else分支太多,导致代码可读性变差
n := 2
switch n {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
case 3:
fmt.Println("3")
case 4:
fmt.Println("4")
case 5:
fmt.Println("5")
default:
fmt.Println("No")
}
}
多个值匹配
package main
import (
"fmt"
)
func main() {
//多个匹配值
n1 := 7
switch n1 {
case 1, 3, 5, 7, 9:
fmt.Println("奇数")
case 2, 4, 6, 8:
fmt.Println("偶数")
default:
fmt.Println(n1)
}
// 也可以在switch代码块中声明变量并且判断
switch n2 := 8; n2 {
case 1, 3, 5, 7, 9:
fmt.Println("奇数")
case 2, 4, 6, 8:
fmt.Println("偶数")
default:
fmt.Println(n1)
}
}
goto语句
package main
import (
"fmt"
)
func main() {
// 用标记位, 跳出多层for循环
flag := false
for i := 0; i
package main
import (
"fmt"
)
func main() {
// goto+label(标签) 实现跳出多层for循环(不建议使用)
for i := 0; i