自学内容网 自学内容网

Golang--流程控制

1、分支结构

1.1 if分支

单分支

语法:
if 条件表达式 {

  逻辑代码

}

  • 当条件表达式为true时,就会执行代码块的代码。
  • 条件表达式左右的()可以不写,也建议不写 
  • if和表达式中间,一定要有空格
  • 在Golang中,{}是必须有的,就算你只写一行代码。
  • 在golang里,if后面可以并列的加入变量的定义
package main  

import (  
"fmt"
)  

func main() {  
if true {
fmt.Println("hello")
}
}
package main  

import (  
"fmt"
)  

func main() {  
if a,b := 1,2; a < b {
fmt.Println("hello")
}
}

 双分支

正确语法​:

if 条件表达式 {

   逻辑代码1

} else {

   逻辑代码2

}

当条件表达式成立,即执行逻辑代码1,否则执行逻辑代码2。{}也是必须有的。

错误语法:

if 条件表达式 {

   逻辑代码1

}

else {

   逻辑代码2

​​​​​​

package main  

import (  
"fmt"
)  

func main() {  
if a,b := 10,20; a > b{
fmt.Println("a > b")
}else{
fmt.Println("a < b")
}
}

多分支

语法:

if 条件表达式1 {

    逻辑代码1

} else if 条件表达式2 {

    逻辑代码2

}

.......

else {

 逻辑代码n

}
 

package main  

import (  
"fmt"
)  

func main() {  
if a,b := 10,10; a > b{
fmt.Println("a > b")
}else if c := 100; a < c{
fmt.Println("a < c")
}else
{
fmt.Println("a == b")
}
}

1.2 switch分支

 语法:

switch 表达式 {

  case 值1,值2,.….:

          语句块1

  case 值3,值4,...:

          语句块2

  ....

  default:

                          语句块

}


注意:

  • switch后的表达式可以是常量值、变量、一个有返回值的函数调用等*
  • case后面的值如果是常量值(字面量),则要求不能重复
  • case后的各个值的数据类型,必须和 switch 的表达式数据类型一致
  • case后面可以带多个值,使用逗号间隔。比如 case 值1,值2...*
  • case后面不需要带break* (C语言如果没有break,就会执行后面的case)
  • default语句不是必须的,位置也是随意的
  • switch后也可以不带表达式,当做if分支来使用*
  • switch后也可以直接声明/定义一个变量,分号结束,不推荐*
  • switch穿透,利用fallthrough关键字,如果在case语句块后增加fallthrough ,则会继续执行下一个case,也叫switch穿透。
package main
import "fmt"
func main(){
        //实现功能:根据给出的学生分数,判断学生的等级:
        // >=90  -----A
        // >=80  -----B
        // >=70  -----C
        // >=60  -----D
        // <60   -----E
        //给出一个学生分数:
        var score int = 187
        //根据分数判断等级:
        //switch后面是一个表达式,这个表达式的结果依次跟case进行比较,满足结果的话就执行冒号后面的代码。
        //default是用来“兜底”的一个分支,其它case分支都不走的情况下就会走default分支
        //default分支可以放在任意位置上,不一定非要放在最后。
        switch score/10 {
                case 10 :
                        fmt.Println("您的等级为A级")
                case 9 :
                        fmt.Println("您的等级为A级")
                case 8 :
                        fmt.Println("您的等级为B级")
                case 7 :
                        fmt.Println("您的等级为C级")
                case 6 :
                        fmt.Println("您的等级为D级")
                case 5 :
                        fmt.Println("您的等级为E级")
                case 4 :
                        fmt.Println("您的等级为E级")
                case 3 :
                        fmt.Println("您的等级为E级")
                case 2 :
                        fmt.Println("您的等级为E级")
                case 1 :
                        fmt.Println("您的等级为E级")
                case 0 :
                        fmt.Println("您的等级为E级")
                default:
                        fmt.Println("您的成绩有误")
        }
        
}

2、循环结构

2.1 for循环

for循环语法:
 for 初始表达式; 布尔表达式; 迭代因子 {    //注意:这里迭代因子只能有一个
          循环体;
}


注意:

  1. for的初始表达式 不能用var定义变量的形式,要用:=
  2. for循环实际就是让程序员写代码的效率高了,但是底层该怎么执行还是怎么执行的,底层效率没有提高,只是程序员写代码简洁了而已
package main  

import (  
"fmt"
)  

func main() {  
for i,j := 1,2; i < 10 && j < 10; i++{
fmt.Println(i * j)
j++
}
}

 for循环类似while的用法:

package main  

import "fmt"  

func main() {  
    i := 0  
    for i < 5 {  
        fmt.Println(i)  
        i++  
    }  
}

 for实现无线循环:

package main  

import "fmt"  

func main() {  
    i := 0  
    for {  
        if i >= 5 {  
            break  
        }  
        fmt.Println(i)  
        i++  
    }  
}

 2.2 for range

 for range结构是Go语言特有的一种的迭代结构,for range 可以遍历数组、切片、字符串、map 及通道,for range 语法上类似于其它语言中的 foreach 语句,一般形式为:
for key, val := range coll {
    ...
}

 

package main  

import "fmt"  

func main() {  
    // 遍历数组  
    arr := []int{1, 2, 3, 4, 5}  
    for i, v := range arr {  
        fmt.Printf("Index: %d, Value: %d\n", i, v)  
    }  

    // 遍历字符串  
    str := "hello"  
    for i, v := range str {  
        fmt.Printf("Index: %d, Character: %c\n", i, v)  
    }  
}

2.3 关键字

2.3.1 break

  • break可以结束正在执行的循环(break的作用结束离它最近的循环)
  • break 标签,结束指定标签对应的循环,可以做到一次跳出多重循环(注意:如果那个标签没有使用到 的话,那么标签不用加,否则报错:定义未使用)

没有使用标签(只跳出最近的一次循环):

package main
import "fmt"
func main(){
        //双重循环:
        for i := 1; i <= 5; i++ {
                for j := 2; j <= 4; j++ {
                        fmt.Printf("i: %v, j: %v \n",i,j)
                        if i == 2 && j == 2 {
                                break
                        }
                }
        }
        fmt.Println("-----ok")
}

使用标签(可以做到一次break跳出多层循环): 

package main
import "fmt"
func main(){
        //双重循环:
        label2:
        for i := 1; i <= 5; i++ {
                for j := 2; j <= 4; j++ {
                        fmt.Printf("i: %v, j: %v \n",i,j)
                        if i == 2 && j == 2 {
                                break label2   //结束指定标签对应的循环
                        }
                }
        }
        fmt.Println("-----ok")
}

 2.3.2 continue

  • continue结束本次循环,继续下一次循环(continue的作用是结束离它近的那个循环,继续离它近的那个循环,即在同一层循环中)
  • continue 标签,结束指定标签对应的本次循环,可以做到一次跳过指定标签对应的一次循环,并继续下一次循环(注意:如果那个标签没有使用到的话,那么标签不用加,否则报错:定义未使用)

没有使用标签:

package main
import "fmt"
func main(){
        //双重循环:
        for i := 1; i <= 5; i++ {
                for j := 2; j <= 4; j++ {
                        if i == 2 && j == 2 {
                                continue
                        }
                        fmt.Printf("i: %v, j: %v \n",i,j)
                }
        }
        fmt.Println("-----ok")
}

使用标签:

package main
import "fmt"
func main(){
        //双重循环:
        label:
        for i := 1; i <= 5; i++ {
                for j := 2; j <= 4; j++ {
                        if i == 2 && j == 2 {
                                continue label
                        }
                        fmt.Printf("i: %v, j: %v \n",i,j)
                }
        }
        fmt.Println("-----ok")
}

 

 2.3.3 goto

  • Golang的 goto 语句可以无条件地转移到程序中指定的行。
  • goto语句通常与条件语句配合使用。可用来实现条件转移.
  • 在Go程序设计中一般不建议使用goto语句,以免造成程序流程的混乱。
package main
import "fmt"
func main(){
        fmt.Println("hello golang1")
        fmt.Println("hello golang2")
        if 1 == 1 {
                goto label1 //goto一般配合条件结构一起使用
        }
        fmt.Println("hello golang3")
        fmt.Println("hello golang4")
        fmt.Println("hello golang5")
        fmt.Println("hello golang6")
        label1:
        fmt.Println("hello golang7")
        fmt.Println("hello golang8")
        fmt.Println("hello golang9")
}

2.3.4 return

直接结束当前函数:

package main
import "fmt"
func main(){
        for i := 1; i <= 100; i++ {
                fmt.Println(i)
                if i == 5 {
                        return //结束当前的函数
                }
        }
        fmt.Println("hello golang")
}


原文地址:https://blog.csdn.net/cookies_s_/article/details/143458480

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!