golang流程控制

go的流程控制分别有

1,条件语句if/else

2,循环语句

1),for循环

2),continue与break区别

3),for-range

4),goto循环控制语句

3,选择语句switch/case

条件语句



    Go 提供了我们熟悉的 if/else 语句的if,if-else,if-**else if**-else 变体。它用于检查条件,并在条件为 true 或 false 时执行一些代码。

if 语句 if 语句 由一个布尔表达式后紧跟一个或多个语句组成

 

   • 可省略条件表达式括号。

   • 持初始化语句,可定义代码块局部变量。

   • 代码块左 括号必须在条件表达式尾部。



   if 布尔表达式 {    /* 在布尔表达式为 true 时执行 */    }


package main
import "fmt"
func main() {five_m_go := true//基本if five_m_go { fmt.Println("there is five-m-go")}//if-else,if-else ifif five_m_go == false { fmt.Println("nothing")} else if five_m_go { fmt.Println("you get the five_m_go")} else { fmt.Println("other case")}// if条件可以包含一个初始化表达式,这个表达式中的变量// 是这个条件判断结构的局部变量if learn_time := 5; learn_time > 5 { fmt.Println("you study time is less than 5 m,just:", learn_time)} else if learn_time == 5 { fmt.Println("just enough 5 m")} else { fmt.Println("you study time is more than 5 m,is:", learn_time)}}
运行结果

-> % go run if-go.gothere is five-m-goyou get the five_m_gojust enough 5 m(base)

循环语句


for 循环

    for循环是Go语言唯一的循环结构。但是 Go 的 for 循环有很多个变体,来针对不通的业务场景。


package main
import "fmt"
func main() {//基本learn_time := 1for learn_time <= 5 { fmt.Printf("you need more time to learn,now: %d m\n", learn_time) learn_time += 1}//经典的循环条件初始化/条件判断/循环后条件变化learn_time = 5for your_time := 1; your_time <= learn_time; your_time++ { fmt.Printf("your_time:%d m\n", your_time)}// 无条件的for循环是死循环,除非你使用break跳出循环或者// 使用return从函数返回your_loop := 1for { if your_loop == 6 { break } else { fmt.Println("now: ", your_loop) } your_loop++
}}

运行结果


-> % go run loop_go.goyou need more time to learn,now: 1 myou need more time to learn,now: 2 myou need more time to learn,now: 3 myou need more time to learn,now: 4 myou need more time to learn,now: 5 myour_time:1 myour_time:2 myour_time:3 myour_time:4 myour_time:5 mnow:  1now:  2now:  3now:  4now:  5

continue与break区别

    break 用于跳出循环,当条件满足则结束循环continue 用于跳过循环,当条件满足这跳过本次循环进行后置或条件子语句执行


package main
import "fmt"
func main() {for i := 1; i <= 6; i++ { if i == 2 { continue } fmt.Println("now: ", i)}//breakfor i := 1; i <= 6; i++ { if i == 2 { break } fmt.Println("now: ", i)}}


for-range

    Golang range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环

    针对包含 Unicode 字符的字符串遍历是需要使用 for-range,range 返回两个元素分别为字 节索引和 rune 字符,可通过空白标识符忽略需要接收的变量


package main
import "fmt"
func main() {msg := "learn go in five m,一起来学go"for k, v := range msg { fmt.Printf("k:%d , v: %c\n", k, v)}}
运行结果

-> % go run loop_go.gok:0 , v: lk:1 , v: ek:2 , v: ak:3 , v: rk:4 , v: nk:5 , v:  k:6 , v: gk:7 , v: ok:8 , v:  k:9 , v: ik:10 , v: nk:11 , v:  k:12 , v: fk:13 , v: ik:14 , v: vk:15 , v: ek:16 , v:  k:17 , v: mk:18 , v: ,k:19 , v: 一k:22 , v: 起k:25 , v: 来k:28 , v: 学k:31 , v: gk:32 , v: o


goto循环控制语句

    可以通过 goto 语句任意跳转到当前函数指定的 label 位置

    break 和 continue 后也可以指定 label 用于指定跳出或跳过指定 label 同层级的循环


package main
import "fmt"
func main() {//使用标签完成for循环your_time := 1your_loop := 1START: //定义START标签if your_time > 4 { goto END //跳转到END标签} else { your_loop += your_time your_time++ goto START}END:fmt.Println(your_loop)
}


运行结果


-> % go run loop_go.go11


选择语句

当条件判断分支太多的时候,我们会使用switch语句来优化逻辑。


package main
import "fmt"
func main() {your_time := 5fmt.Print("your time is :", your_time, " as :")switch your_time {case 1: fmt.Println("one")case 2: fmt.Println("two")case 5: fmt.Println("five")}// 你可以使用逗号来在case中分开多个条件。还可以使用default语句,// 当上面的case都没有满足的时候执行default所指定的逻辑块。your_time2 := 5fmt.Print("your time is :", your_time2, " as :")switch your_time2 {case 1, 3: fmt.Println("one")case 2: fmt.Println("two")default: fmt.Println("is default")}// 当switch没有跟表达式的时候,功能和if/else相同,这里我们// 还可以看到case后面的表达式不一定是常量。your_time3 := 5fmt.Print("your time is :", your_time3, " as :")switch {case your_time3 < 5: fmt.Println("less than 5")default: fmt.Println("is default 5")}}
运行结果

-> % go run loop_go.goyour time is :5 as :fiveyour time is :5 as :is defaultyour time is :5 as :is default 5



请使用浏览器的分享功能分享到微信等