流程控制

程序的流程控制结构一共有三种: 顺序结构, 选择结构, 循环结构

顺序结构: 从上到下, 逐行执行, 默认的逻辑

选择结构: 条件满足某些代码才会执行

  • if
  • switch
  • select

循环结构: 条件满足某些代码会被反复执行0-n次

  • for

1.if语句

条件语句需要开发者通过指定一个或多个条件, 并通过测试条件是否为true来决定是否执行指定语句, 并在条件为false的情况再执行另外的语句.

下图展示了程序语言中条件语句的结构

基本用法

package main

import "fmt"

func main() {
	//分数
	var score int = 90

	// a b c d
	if score >= 90 && score <= 100 {
		fmt.Println("A")
	} else if score >= 80 && score < 90 {
		fmt.Println("B")
	} else if score >= 70 && score < 80 {
		fmt.Println("C")
	} else if score >= 60 && score < 70 {
		fmt.Println("D")
	} else {
		fmt.Println("不及格")
	}
}

if嵌套语句

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

应用

package main

import "fmt"

func main() {
	// 验证密码, 再次输入密码
	var a, b int
	var pwd int = 20221020

	//用户的输入
	fmt.Print("请输入密码: ")
	fmt.Scan(&a)
	//业务: 验证密码是否正确
	if a == pwd {
		fmt.Print("请再次输入密码")
		fmt.Scan(&b)
		if b == pwd {
			fmt.Println("登录成功了")
		} else {
			fmt.Println("登录失败了, 第二次密码错误")
		}
	} else {
		fmt.Println("登录失败, 密码错误")
	}
}

2.switch

switch语句用于基于不同条件执行不同动作, 每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止.

package main

import "fmt"

func main() {
	var score int = 90

	switch score {
	case 90:
		fmt.Println("A")
	case 80:
		fmt.Println("B")
	case 50, 60, 70:
		fmt.Println("C")
	default:
		fmt.Println("D")
	}

	//switch 默认的条件是 bool = true
	switch {
	case false:
		fmt.Println("false")
	case true:
		fmt.Println("true")
	default:
		fmt.Println("其他")
	}
}

switch语句执行的过程从上到下, 直到找到匹配项, 匹配项后面也不需要再加break, switch默认情况下case最后自带break语句

fallthrough 贯穿;直通

switch默认情况下匹配成功后就不会执行其他case, 如果我们需要执行后面的case, 可以使用fallthrough穿透case使用fallthrough会强制执行后面的case语句, fallthrough不会判断下一条case的表达式是否为true.

package main

import "fmt"

func main() {
	a := false

	switch a {
	case false:
		fmt.Println("1,case条件为false")
		fallthrough
	case true:
		if a == false {
			break //终止case穿透
		}
		fmt.Println("2,case条件为false")
	}
}

3.for

在不少实际问题中有许多具体规律性的重复操作, 因此在程序中就需要重复执行某些语句

for循环是一个循环控制结构, 可以执行指定次数的循环.

package main

import "fmt"

func main() {

	//循环10次
	//for 条件起始值; 循环条件; 控制变量自增或者自减
	for i := 1; i <= 10; i++ {
		fmt.Println(i)
	}

	i := 1
	for i <= 10 {
		i++
		fmt.Println(i)
	}

	//死循环
	for {

	}

	//计算1到10的数字之和
	sum := 0
	for i := 1; i <= 10; i++ {
		sum += i
	}
	fmt.Println(sum)
}

打印一个方阵

package main

import "fmt"

func main() {

	for j := 0; j < 5; j++ {
		for i := 1; i <= 5; i++ {
			fmt.Print("* ")
		}
		fmt.Println()
	}
}

打印99乘法表

package main

import "fmt"

//使用for循环打印99乘法表
func main() {

	for j := 1; j <= 9; j++ {
		for i := 1; i <= j; i++ {
			fmt.Printf("%d*%d=%d\t", i, j, i*j)
		}
		fmt.Println()
	}
}

break 结束当前整个循环

package main

import "fmt"

func main() {

	for i := 0; i < 10; i++ {
		if i == 5 {
			break
		}
		fmt.Println(i)
	}
}

continue 结束当次循环

package main

import "fmt"

func main() {

	for i := 0; i < 10; i++ {
		if i == 5 {
			continue
		}
		fmt.Println(i)
	}
}

4.String

什么是String

Go语言中的字符串是一个字节的切片, 可以通过将其内容封装在""中来创建字符串,Go中的字符串是Unicode兼容的, 并且是UTF-8编码

字符串是一些字节的集合.

package main

import "fmt"

func main() {
	str := "Hello zjzaki"
	fmt.Println(str)

	//获取字符串的长度
	fmt.Println("字符串的长度", len(str))

	//获取指定的字节
	fmt.Println("字节打印: ", str[0])
	fmt.Printf("%c", str[0])

	//for
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c\n", str[i])
	}

	//for range 循环, 遍历数组, 切片
	//返回下标和对应的值
	for i, v := range str {
		fmt.Print(i)
		fmt.Printf("%c", v)
	}

	//string不能修改
	str[2] = 'A'
}