Go语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
- 顺序结构:程序按顺序执行,不发生跳转。
- 选择结构:依据是否满足条件,有选择的执行相应功能。
- 循环结构:依据条件是否满足,循环多次执行某段代码。
选择结构
if语句
if
var a int = 3if a == 3 { fmt.Println("a==3")}if b := 3; b == 3 {fmt.Println("b==3")}
if … else
if a := 3; a == 4 {fmt.Println("a==4")} else {fmt.Println("a!=4")}
if … else if … else
if a :&#61; 3; a > 3 {fmt.Println("a>3")} else if a <3 {fmt.Println("a<3")} else if a &#61;&#61; 3 {fmt.Println("a&#61;&#61;3")} else {fmt.Println("error")}
switch语句
Go里面switch默认相当于每个case最后带有break&#xff0c;匹配成功后不会自动向下执行其他case&#xff0c;而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码&#xff1a;
var score int &#61; 90switch score {case 90:fmt.Println("优秀")case 80:fmt.Println("良好")case 50, 60, 70:fmt.Println("一般")default:fmt.Println("差")}
可以使用任何类型或表达式作为条件语句&#xff1a;
switch s1 :&#61; 90; s1 { case 90:fmt.Println("优秀")case 80:fmt.Println("良好")default:fmt.Println("一般")}var s2 int &#61; 90switch { case s2 >&#61; 90: fmt.Println("优秀")case s2 >&#61; 80:fmt.Println("良好")default:fmt.Println("一般")}switch s3 :&#61; 90; { case s3 >&#61; 90: fmt.Println("优秀")case s3 >&#61; 80:fmt.Println("良好")default:fmt.Println("一般")}
循环语句
for
var i, sum intfor i &#61; 1; i <&#61; 100; i&#43;&#43; {sum &#43;&#61; i}fmt.Println("sum &#61; ", sum)
range
s :&#61; "abc"for i :&#61; range s { //支持 string/array/slice/map。fmt.Printf("%c\n", s[i])}for _, c :&#61; range s { // 忽略 indexfmt.Printf("%c\n", c)}
跳转语句
break和continue
在循环里面有两个关键操作break和continue&#xff0c;break操作是跳出当前循环&#xff0c;continue是跳过本次循环。
for i :&#61; 0; i <5; i&#43;&#43; {if 2 &#61;&#61; i {//break //break操作是跳出当前循环continue //continue是跳过本次循环}fmt.Println(i)}
当嵌套过深的时候&#xff0c;break和continue还可以跟着标号&#xff0c;用来跳到多重循环中的外层循环&#xff1a;
func main() {
LABEL:for i :&#61; 0; i < 5; i&#43;&#43; {for {fmt.Println(i)break LABEL }}
}
注意&#xff1a;break可⽤于for、switch、select&#xff0c;⽽continue仅能⽤于for循环。
goto
用goto跳转到必须在当前函数内定义的标签&#xff1a;
func main() {
LABEL:for i :&#61; 0; i < 5; i&#43;&#43; {for {fmt.Println(i)goto LABEL }}
}