程序媛

流程控制

分支结构

if else判断语句

当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行分支2,都不满足时,则执行分支3。

Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else匹配的{也必须与else写在同一行,else也必须与上一个ifelse if右边的大括号在同一行。

package main
import "fmt"
func main(){
    var score int8 = 60
    if score>=90{
        fmt.Println("优秀")
    }else if score>=80{
        fmt.Println("良好")
    }else if score>=60{
        fmt.Println("及格")
    }else{
        fmt.Println("不及格")
    }
}
package main
import "fmt"
func main(){
    //if条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断
    //在这个示例中,score变量只在当前的if else语句块中生效
    if score:= 60;score>=90{
        fmt.Println("优秀")
    }else if score>=80{
        fmt.Println("良好")
    }else if score>=60{
        fmt.Println("及格")
    }else{
        fmt.Println("不及格")
    }
}
写法2

switch语句

在多条件情况下,switch的效率是高于if的,因此使用switch语句可方便地对大量的值进行条件判断。

go tool compile -S main.go >> main.s #查看go的汇编语言

 

package main

import "fmt"

func main(){
    finger := 3
    switch finger {
    case 1:
        fmt.Println("大拇指")
    case 2:
        fmt.Println("食指")
    case 3:
        fmt.Println("中指")
    case 4:
        fmt.Println("无名指")
    case 5:
        fmt.Println("小拇指")
    default:  // Go语言规定每个switch只能有一个default分支。
        fmt.Println("输入无效")
    }
}
package main

import "fmt"

func main(){
    
    switch finger := 3; finger {
    case 1:
        fmt.Println("大拇指")
    case 2:
        fmt.Println("食指")
    case 3:
        fmt.Println("中指")
    case 4:
        fmt.Println("无名指")
    case 5:
        fmt.Println("小拇指")
    default:  // Go语言规定每个switch只能有一个default分支。
        fmt.Println("输入无效")
    }
}
可以在switch语句中创建局部变量
package main

import "fmt"

func main(){
    finger := 3
    switch finger {
    case 1,3,5,7,9:
        fmt.Println("基数")
    case 2,4,6,8,10:
        fmt.Println("偶数")
    default:
        fmt.Println("输入无效")
    }
}
一个分支可以有很多值
package main

import "fmt"

func main(){
    n := 3
    switch {    // 不需要跟判断的变量
    case n%2 == 1:
        fmt.Println("基数")
    case n%2 == 0:
        fmt.Println("偶数")
    default:
        fmt.Println("输入无效")
    }
}
分支中还可以用表达式
package main

import "fmt"

func main(){
    s := "a"
    switch {
    case s == "a":
        fmt.Println("a")
        fallthrough // 可以执行满足条件的case的下一个case
    case s == "b":
        fmt.Println("b")
        fallthrough // 可以执行满足条件的case的下一个case
    case s == "c":
        fmt.Println("c")
    case s == "d":
        fmt.Println("c")
    default:
        fmt.Println("...")
    }
}
/*
结果:
a
b
c
*/
fallthrough语法(了解)

循环结构 for

在go语言中,所有的循环类型均可以使用for来完成。

for基本循环

package main

import "fmt"

func main(){
    for n :=0;n<10;n++{ //起始值;判断条件;循环条件
        fmt.Println(n)
    }
}
package main

import "fmt"

func main(){
    n :=0
    for ;n<10;n++{  //起始值可以忽略,但是分号;必须要写
        fmt.Println(n)
    }
}
忽略起始值
package main

import "fmt"

func main(){
    n :=0
    for n<10{  
        fmt.Println(n)
        n++
    }
}
忽略起始值和循环条件
package main

import "fmt"

func main(){
    n :=0
    for{  //不要执行,会停不下来导致程序卡住
        fmt.Println(n)
    }
}
无限循环 

for range

Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:

  1. 数组、切片、字符串返回索引和值。
  2. map返回键和值。
  3. 通道(channel)只返回通道内的值。
package main

import "fmt"

func main(){
    n := [5]int{10,5,9,2,4}
    for i := range n{  
        fmt.Println(i) // i表示索引
    }
    for i,j := range n{  
        fmt.Println(i,j) //i表示索引,j表示数组中的值
    }
}

跳出循环

break语句

默认情况下,for循环会一直执行到for循环条件不成立,break可以在循环中结束for语句

package main

import "fmt"

func main(){
    n := [5]int{10,5,9,2,4}
    for _,j := range n{
        fmt.Println(j)
        if j==9{
            break
        }
    }
}

continue语句

continue可以结束当前循环,继续开始下一次循环迭代过程。

package main

import "fmt"

func main(){
    n := [5]int{10,5,9,2,4}
    for _,j := range n{
        if j==9{
            continue
        }
        fmt.Println(j)
    }
}

标签转移语句

goto label

goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。

Go语言中使用goto语句能简化一些代码的实现过程。

package main
import "fmt"
func main(){
   for i := 0; i < 10; i++ {
       for j := 0; j < 10; j++ {
           if j == 2 {
               goto breakTag // 设置退出标签
           }
           fmt.Printf("%v-%v\n", i, j)
       }
   }
   breakTag: // 定义标签
       fmt.Println("结束for循环")
} 

break label

package main
import "fmt"
func main(){
    breakT:
        for i := 0; i < 10; i++ {
            for j := 0; j < 10; j++ {
                if j == 2 {
                    break breakT // 设置退出标签
                }
                fmt.Printf("%v-%v\n", i, j)
            }
        }
    fmt.Println("end")
}

/*
结果:
0-0
0-1
end
*/

continue label

package main
import "fmt"
func main(){
    continueT:
        for i := 0; i < 5; i++ {
            for j := 0; j < 5; j++ {
                if j == 2 {
                    continue continueT // 设置退出标签
                }
                fmt.Printf("%v-%v\n", i, j)
            }
        }
    fmt.Println("end")
}
0-0
0-1
1-0
1-1
2-0
2-1
3-0
3-1
4-0
4-1
end
结果 

练一练

package main
import "fmt"
func main(){
    for i:=1;i<10;i++{
        for j:=1;j<10;j++{
            fmt.Printf("%d*%d=%2d ",j,i,i*j)
            if i==j{
                fmt.Println("")
                break      
            }
        }            
    }
}
输出99乘法表

 

posted @ 2019-11-21 16:43  Eva_J  阅读(91)  评论(0)    收藏  举报