天天看点

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

介绍: