Go语言入门-流程控制(for、switch、select、range、break、goto、continue)

本文详细介绍了Go语言中的流程控制语句,包括条件语句(if、switch、select)、循环语句(for、for range)、循环跳转语句(break、continue、goto)。特别强调了switch语句的无break执行特性,以及select的随机执行case和超时判断功能。
摘要由CSDN通过智能技术生成

Go语言入门-流程控制(for、switch、select、range、break、goto、continue)

目录

Go语言入门-流程控制

条件语句

if语句

switch语句

select语句

循环语句

for语句

for range语句

循环跳转语句

goto语句

break语句

continue语句



条件语句

  • if语句

if语句语法

if bool表达式 { //左花括号必须跟随bool表达式
    //当bool表达式为true是执行。
    Todo....
}

示例如下:

package main

func main() {
	a := 10
	if a >= 10 {
		println("a 大于等于10") //10
	}

	if a < b100 {
		println("a小于等于100") //100
	}
}
/**
output:
a 大于等于10
a小于等于100
 */

if...else 语法

if bool表达式1 {
    Todo..分支1
} else if bool表达式2 {
     Todo..分支2
} else{
     Todo..分支3
}

示例如下:

//获取绩效等级
func getPerformanceLevel(score int) {
	if score > 120 {
		fmt.Println("怕是要上天")
	} else if score > 100 {
		fmt.Println("超越")
	} else if score >= 90 {
		fmt.Println("优秀")
	} else if score >= 80 {
		fmt.Println("良好")
	} else if score >= 60 {
		fmt.Println("合格")
	} else {
		fmt.Println("卷铺盖走人吧")
	}
}
func main() {
	score1 := 300
	score2 := 110
	score3 := 95
	score4 := 81
	score5 := 61
	score6 := 50
	getPerformanceLevel(score1)
	getPerformanceLevel(score2)
	getPerformanceLevel(score3)
	getPerformanceLevel(score4)
	getPerformanceLevel(score5)
	getPerformanceLevel(score6)
}
/**
output:
怕是要上天
超越
优秀
良好
合格
卷铺盖走人吧
 */

 

if 初始化语句

func main() {
    if a := 10; a > 0 {
    fmt.Println("if初始化测试")
    }
}
/**
output:
if初始化测试
 */

以上例子中定义了局部变量a,局部变量a的作用域为整个if else语句块。这一点区别于C、C++、Java语言

备注:Go语言中不支持三元操作符(三目运算符) "a > b ? a : b"。

  • switch语句

“ Switch”语句提供分支执行功能。 将表达式或类型说明符与“ switch”中的“ case”表达式进行比较,以确定要执行的分支。也就是说switch分为两类,第一类是 基于表达式选择的switch语句,第二类是基于类型选择的switch语句。

表达式switch语句语法

    switch expr { //expr 表达式
    case var1: Todo1 //expr表达式的值同var1进行比较,如果相等 执行Todo1语句并且退出switch
    case var2: Todo2  //expr表达式的值同var2进行比较,如果相等 执行Todo2语句并且退出switch
    case var3: Todo3  //expr表达式的值同var3进行比较,如果相等 执行Todo3语句并且退出switch
    default: Todo4  //expr表达式的值都不满足case语句后面表达式的值 则会执行default
    }

   //分支使用表达式,类似于if else
   switch  { //无表达式
   case expr1: Todo1 //expr表达式为true 执行Todo1语句并且退出switch
   case expr2: Todo2  //expr表达式为true 执行Todo3语句并且退出switch
   case expr3: Todo3  //expr表达式为true 执行Todo3语句并且退出switch
   default: Todo4  //以上case都不满足时, 执行Todo4语句并且退出switch
   }

通过以上可以看出是与C语言、C++、Java是不一样的,执行了某一条case语句以后实际上不需要再次break主动退出switch语句。

示例如下

func getWeekDay(day int) {
    switch day {
    case 7 :
        fmt.Println("周 日")
    case 6:
        fmt.Println("周", day)
    case 5:
        fmt.Println("周", day)
    case 4:
        fmt.Println("周", day)
    case 3:
        fmt.Println("周", day)
    case 2:
        fmt.Println("周", day)
    case 1:
        fmt.Println("周", day)
    default:
        fmt.Println("ERROR")
    }
}

func main() {
    for i := 0; i < 9; i++ {
        getWeekDay(i)
    }
}
/**
ouput:
ERROR
周 1
周 2
周 3
周 4
周 5
周 6
周 日
ERROR
 */

由此可以看出,switch后跟表达式语句时,更加适用与某些点固定值的分支执行。ifelse适用与某些段的分支执行,当然两种也可以互相转换。那么switch能够模拟if ... else按段执行吗?答案是可以的。可以使用switch { case expr:...}的方式进行处理。如下:



//用switch改造if...else
//获取绩效等级
func getPerformanceLevelBySwitch(score int) {
    switch {
    case score > 120:
            fmt.Println("怕是要上天")
    case score > 100:
            fmt.Println("超越")
    case score >= 90:
        fmt.Println("优秀")
    case score >= 80:
            fmt.Println("良好")
    case score >= 60:
            fmt.Println("合格")
    default:
            fmt.Println("卷铺盖走人吧")
    }
}
func main() {
    score1 := 300
    score2 := 110
    score3 := 95
    score4 := 81
    score5 := 61
    score6 := 50
    getPerformanceLevelBySwitch(score1)
    getPerformanceLevelBySwitch(score2)
    getPerformanceLevelBySwitch(score3)
    getPerformanceLevelBySwitch(score4)
    getPerformanceLevelBySwitch(score5)
    getPerformanceLevelBySwitch(score6)
}
/**
output:
怕是要上天
超越
优秀
良好
合格
卷铺盖走人吧
 */

以上例子通过switch后面无表达式的方式,通过case关键字后增加bool表达式来判断是否执行case语句。从而达到模拟if...else进行数据分段的逻辑判断。

该用法为go语言特殊用法

类型switch语句语法

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型如下:

func typeSwitchDemo(x interface{}) {
    switch x.(type) {
    case nil:
        fmt.Println("nil")
    case int:
        fmt.Println("int")
    case float64:
        fmt.Println("float64")
    case bool, string:
        fmt.Println("bool or string")
    default:
        fmt.Println("no found Type")
    }
}

func main() {
    var a1 chan int
    a2 := 1
    a3 := 1.0
    a4 := true
    a5 := "dsfsd"
    typeSwitchDemo(a1) //no found Type
    typeSwitchDemo(nil) //nil
    typeS
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值