@@ -1,58 +0,0 @@ 05.流程控制 | 凤凰涅槃进阶之路

05.流程控制

Abel sun2023年1月6日约 1235 字大约 4 分钟

05.流程控制

Go语言支持最基本的三种程序运算结构:顺序结构,选择结构,循环结构。

  • 顺序结构:程序按顺序执行,不发生跳转。
  • 选择结构:依据是否满足条件,有选择的执行符合条件的程序。
  • 循环结构:依据条件是否满足,循环多次执行某段代码。

1,if判断

1,if简单使用

package main

import "fmt"

func main() {
 s := "王思聪"

 //if和{就是条件,条件通常都是关系运算符
 if s == "王思聪" { //左括号和if要在同一行
  fmt.Println("左右一个妹子,右手一个大妈")
 }

 //if支持嵌入1个初始化语句,初始化语句和判断条件以分号分隔
 if a := 10; a == 10 { //条件为真,则执行如下打印语句
  fmt.Println("a = 10")
 }
}

2,if复杂判断

package main

import "fmt"

func main() {
 //1
 a := 10
 if a == 10 {
  fmt.Println("a = 10")
 } else {
  fmt.Println("a != 10")
 }

 //2
 if a := 9; a == 10 {
  fmt.Println("a = 10")
 } else {
  fmt.Println("a != 10")
 }

 //注意,上边虽然两个例子里边都使用了变量a,但是并不会报冲突。

 //3
 b := 8
 if a == 10 {
  fmt.Println("b = 10")
 } else if b < 10 {
  fmt.Println("b < 10")
 } else if b > 10 {
  fmt.Println("b > 10")
 } else {
  fmt.Println("这是不可能的!")
 }

 //4
 if b := 8; b == 10 {
  fmt.Println("b = 10")
 } else if b < 10 {
  fmt.Println("b < 10")
 } else if b > 10 {
  fmt.Println("b > 10")
 } else {
  fmt.Println("这是不可能的!")
 }
}

2,switch语句

switch语句与shell当中的case语句非常类似,只不过语法关键字稍微不同。

package main

import "fmt"

func main() {
 num := 1

 switch num { //switch后面写的是变量本身
 case 1:
  fmt.Printf("选择的楼层是%d层", num)
  break       //go语言也有break关键字,表示跳出switch语句,可以不写,默认就包含
  fallthrough //表示不跳出switch语句,后面的无条件执行,不常用,了解即可
 case 2:
  fmt.Printf("选择的楼层是%d层", num)
  //break
 case 3:
  fmt.Printf("选择的楼层是%d层", num)
  //break
 case 4:
  fmt.Printf("选择的楼层是%d层", num)
  //break
 case 5:
  fmt.Printf("选择的楼层是%d层", num)
  //break
 default: //用于匹配条件以外的情况
  fmt.Println("您选择的楼层不存在!")
 }
}

switch的一些其他用法介绍。

package main

import "fmt"

func main() {
 //switch也支持直接初始化语句,初始化语句和变量本身以分号分隔
 switch num := 4; num {
 case 1:
  fmt.Printf("选择的楼层是%d层", num)
 case 2:
  fmt.Printf("选择的楼层是%d层", num)
 case 3, 4, 5: //如果有多个条件结果一样,那么多条件可以写在一起
  fmt.Println("选择的是xx层")
 case 6:
  fmt.Printf("选择的楼层是%d层", num)
 default: //用于匹配条件以外的情况
  fmt.Println("您选择的楼层不存在!")
 }

 //还可以将条件写在case语句当中,示例如下:
 score := 85
 switch {
 case score >= 90:
  fmt.Println("优秀")
 case score >= 80:
  fmt.Println("良好")
 case score >= 70:
  fmt.Println("一般")
 default:
  fmt.Println("其他")
 }
}

3,for循环

package main

import "fmt"

func main() {
 /*标准格式如下:
 for 初始条件; 判断条件; 条件变化 {
  }
 */

 //算出1+2+3...100的累加和

 sum := 0
 /*
  1,初始条件  i := 1
  2,判断条件 i <= 100 是否为真,如果为真,则执行循环体,如果为假,则跳出
  3,条件变化 i++
  4,重复 第2,3,4步
 */
 for i := 1; i <= 100; i++ {
  sum = sum + i
 }
 fmt.Println("sum =", sum)

}

4,range关键字

package main

import "fmt"

func main() {
 str := "abc"

 //通过for打印每个字符
 for i := 0; i < len(str); i++ {
  fmt.Printf("str[%d]=%c\n", i, str[i])
 }

 //range表示迭代打印每个元素,默认返回2个值:一个是元素的位置,一个是元素的值
 for i, data := range str { //i表示的是元素的位置(0,1,2),data表示的是元素对应的值(a,b,c)
  fmt.Printf("str[%d]=%c\n", i, data)
 }

 //等价于如下写法:
 for i := range str { //第2个返回值,默认丢弃,返回元素的位置(下标)
  fmt.Printf("str[%d]=%c\n", i, str[i])
 }

 //又等价于如下写法
 for i, _ := range str {
  fmt.Printf("str[%d]=%c\n", i, str[i])
 }
}

5,break和continue

break表示跳出当前循环。 continue表示跳出本次循环。

注意:break可以用于for,switch,select,而continue只能用在for循环当中。

package main

import (
 "fmt"
 "time"
)

func main() {
 i := 0
 for { //for后边不写任何东西,表示这个循环条件永远为真,即死循环,或者无限循环
  i++
  time.Sleep(time.Second) //表示sleep 1 s
  if i == 5 {
   //break //跳出循环,如果嵌套多个循环,则跳出最近的那个内循环
   continue //跳出本次循环
  }
  fmt.Println("i =", i)
 }

}

6,goto关键字

package main

import (
 "fmt"
)

func main() {
 //注释掉上边的fmt包,可以单独测试如下两个关键字
 //break  //输出:break is not in a loop, switch, or select
 //continue //输出:continue is not in a loop

 //goto可以用在任何地方,但是不能够跨函数使用
 fmt.Println("1111111")

 goto End //goto是关键词,End是自定义的标签
 fmt.Println("2222222")
End:
 fmt.Println("3333333")
}

但是日常写代码不建议使用这个关键字,会显得代码比较乱。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.9.1