天天看點

Go語言基礎三 流程控制

擷取使用者終端輸入

Go語言基礎三 流程控制

介紹

在程式設計中 需要接收使用者輸入的資料 就可以使用輸入語句來擷取

步驟

1,導入 fmt 包

2,調用fmt包 的 fmt.Scanln() 或者 fmt.Scanf()

Demo

方式一:

package main

import "fmt"

func main() {
    // 要求 從控制台接收使用者資訊 (姓名 年齡 薪水 是否通過考試)
    // 方式1 fmt.Scanln
    // 聲明變量
    var name string
    var age byte
    var sal float32
    var isPass bool
    fmt.Println("請輸入名字")
    fmt.Scanln(&name)
    fmt.Println("請輸入年齡")
    fmt.Scanln(&age)
    fmt.Println("請輸入薪水")
    fmt.Scanln(&sal)
    fmt.Println("請輸入是否通過考試")
    fmt.Scanln(&isPass)
    fmt.Printf("名字是 %v \n 年齡是 %v \n 薪水是 %v \n 是否通過考試 %v \n", name, age, sal, isPass)
}      

方式二

package main

import "fmt"

func main() {
    // 要求 從控制台接收使用者資訊 (姓名 年齡 薪水 是否通過考試)
    // 方式1 fmt.Scanln
    // 聲明變量
    var name string
    var age byte
    var sal float32
    var isPass bool
    fmt.Println("請輸入你的姓名, 年齡, 薪水, 是否通過考試, 使用空格隔開")
    fmt.Scanf("%s %d %f %t", &name, &age, &sal, &isPass)
    fmt.Printf("名字是 %v \n 年齡是 %v \n 薪水是 %v \n 是否通過考試 %v \n", name, age, sal, isPass)
}      

流程控制

單分支控制

if 條件表達式

{

執行代碼塊

}

說明:當條件表達式為 true時 就會執行{}的代碼。注意{}是必須有的就算隻寫一行代碼

package main

import "fmt"

func main() {
    // 編寫程式 可以輸入年齡 判斷該同志的年齡大于18歲 就輸入年齡大于18
    var age int
    fmt.Println("請輸入年齡")
    fmt.Scanln(&age)
    if age >= 18 {
        fmt.Println("你是成年人")
    } else if age < 18 {
        fmt.Println("你還是孩子")
    }
}

C:\Users\86152\AppData\Local\Temp\GoLand\___go_build_gopl_Demo.exe
請輸入年齡
15      
Go語言基礎三 流程控制

單分支細節說明

if age := 20; age > 18 {
        fmt.Println("aaaa")
    }      

分支控制 if-else

Go語言基礎三 流程控制
var age int
    fmt.Println("請輸入年齡")
    fmt.Scanln(&age)
    if age >= 18 {
        fmt.Println("你是成年人")
    } else if age < 18 {
        fmt.Println("你還是孩子")
    }      
Go語言基礎三 流程控制

switch 基本使用

基本介紹

1,switch 語句用于基于不同條件執行不同的動作 每一個case 分支都是唯一的 從上到下逐一測試 直到比對為止

2,比對項後面也不需要在加break

流程圖

Go語言基礎三 流程控制

1 Switch 的執行的流程是,先執行表達式 得到值 然後和case 的表達式進行比較 如果相等 就比對到 然後執行對應的 case 的語句塊 然後退出 switch 控制

2 如果 switch 的表達式的值沒有喝任何的case 的表達式比對成功 則執行 default 的語句塊後退出 switch

3 go 的case 後的表達式可以有多個 ,使用 逗号 間隔

4 go 中的case 語句塊不需要寫break 因為預設會有 即在預設的情況下當程式執行完case 語句塊塊 就直接退出 switch

案例

package main

import "fmt"

func main() {
    var key byte
    fmt.Println("請輸入 a,b,c,d")
    fmt.Scanf("%c", &key)
    switch key {
    case 'a':
        fmt.Println("我是a")
    
    case 'b':
        fmt.Println("我是b")
    default:
        fmt.Println("輸入錯誤")

    }

}      

switch細節讨論

  1. case後是一個表達式(即:常量值、變量、一個有傳回值的函數等都可以)
  2. case後的各個表達式的值的資料類型,必須和 switch 的表達式資料類型一緻
  3. case後面可以帶多個表達式,使用逗号間隔。比如case表達式1,表達式2 …
  4. case後面的表達式如果是常量值(字面量),則要求不能重複
  5. case後面不需要帶break ,程式比對到一個case後就會執行對應的代碼塊,然

    後退出switch,如果一個都比對不到,則執行default

  6. default語句不是必須的.

    7)switch 後也可以不帶表達式 類似 if-else 分支來使用

    8)Switch 後也可以直接聲明、定義一個變量 分号結束

    9)switch 穿透 fallthrough 如果在 case 語句塊後增加 fallthrough 則會執行下一個case 也叫switch 穿透

    10)Type Switch : switch 語句還可以被用于 type-switch 來判斷某個 interface 變量中實際指向的變量的類型

switch 和 if 的比較

1,如果判斷的具體數值不多 而且符合整數 浮點數 字元 字元數 字元串這幾種類型 建議用 switch 語句

2,其他情況 對區間判斷和結果為bool 類型的判斷 使用 if if 使用範圍更廣。

For 的基本介紹應用

快速入門

for i := 0; i < 10; i++ {
        fmt.Println("我是美女")
    }      

基本文法

for 循環變量初始化;循環條件;循環變量疊代 {

循環操作(語句)

}

for 循環執行流程分析

Go語言基礎三 流程控制
Go語言基礎三 流程控制

for 周遊字元串

// 傳統字元串周遊方式1
    var str string = "hello world!"
    for i := 0; i < len(str); i++ {
        fmt.Printf("%c \n", str[i])
    }
    // 用for-range 的方式

    str1 := "fengjiaojiao"
    for i, i2 := range str1 {
        fmt.Printf("i=%d,i2=%c \n", i, i2)
    }      

上面代碼的細節讨論

如果我們的字元串中含有中文 那麼傳統的周遊字元串的方式 就是錯誤 會出現亂碼 原因是傳統的對字元串的周遊是按照位元組來周遊 而一個漢字在 utf-8 編碼是對應3個位元組

for 練習題

//列印 1-100 之間所有是 9的倍數的個數,總和
    sum := 0
    count := 0
    for i := 1; i <= 100; i++ {
        if i%9 == 0 {
            sum += i
            count++
        }
    }
    fmt.Println(sum)
    fmt.Println(count)      

多重循環控制

介紹:

1)将一個循環放在另一個循環體内,就形成了嵌套循環。在外邊的for稱為外層循環在裡面的for循環稱為内層循環。【建議一般使用兩層,最多不要超過3層】

2)實質上,嵌套循環就是把内層循環當成外層循環的循環體。當隻有内層循環的循環條件為false時,才會完全跳出内層循環,才可結束外層的當次循環開始下一次的循環。

3)設外層循環次數為m次,内層為n次,則内層循環體實際上需要執行m*n次。

跳轉控制語句 -break

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    //  編寫 一個無限循環的控制 不停的随機生成數 生成99 時  退出 記錄第幾次找到的
    count := 0

    for {

        rand.Seed(time.Now().UnixNano())
        n := rand.Intn(100) + 1
        count++
        if n == 99 {
            fmt.Println("找到99 啦 退出")

            break
        }
    }
    fmt.Println(count)
}      

break 的基本介紹跟基本文法

基本介紹:

break語句用于終止某個語句塊的執行,用于中斷目前for循環或跳出switch語句。

基本文法:

{

….…

break;

}

以for循環使用break為例,畫出示意圖

Go語言基礎三 流程控制
Go語言基礎三 流程控制

跳轉控制語句 continue

基本介紹:

  1. continue語句用于結束本次循環,繼續執行下一次循環。
  2. continue語句出現在多層嵌套的循環語句體中時,可以通過标簽指明要跳過

    的是哪一層循環,這個和前面的标簽的使用的規則一樣.

基本文法:

{…

continue;

……

}

以for使用continue為例,畫出示意圖

跳轉語句 goto

介紹:

  1. Go語言的goto語句可以無條件地轉移到程式中指定的行。
  2. goto語句通常與條件語句配合使用。可用來實作條件轉移,跳出循環體等功能。3)在Go程式設計中一般不主張使用goto語句,以免造成程式流程的混亂,使理

    解和調試程式都産生困難

跳轉語句 return

介紹: