Go 流程控制

29 阅读2分钟

面向过程编程

  • 自上而下的执行

面向对象编程

  • 将事物抽象成一个个对象, 然后用程序去模拟对象, 进行一些个性化的操作实现。
  • 选择结构

if关键字

package main

import "fmt"

func main() {
	// 接收来自终端的输入, 然后对输入进行判断
	var num1 int
	var num2 int

	// 提示输入
	fmt.Printf("请输入密码: \n")
	// 接收输入 (阻塞式等待 ... 直至用户输入之后才继续进行) 一个简单的人工交互的例子
	// Scan() 接收的是一个指针对象 -> 使用 &变量名 -> 内存地址
	fmt.Scan(&num1) // 等待输入, 若输出完毕(回车) 则会把终端输入的内容赋值给 num1
	fmt.Println(num1)

	// 做判断 数据后面是在数据库根据用户信息查询出来
	if num1 == 11111 {
		fmt.Println("请再次输入密码")
		fmt.Scan(&num2)
		if num2 == 11111 {
			fmt.Println("密码正确")
		} else {
			fmt.Println("输入密码错误")
		}
	} else {
		fmt.Println("输入密码错误")
	}
}

注意在条件判断语句中 没有 1<a<2 这种写法, 只能表示为 a>1 && a<2


switch

switch 可以省略条件 -> 默认 switch true

// 代码格式
// 匹配机制, 根据下面的case结果来进行匹配校验, 满足就执行, 不满足就default 
// (可以在某些场景替代if语句)
// 需要注意的是 switch xxx的类型 与 下面的case xxx的 xxx 数据类型要一致
switch var1 {
    case val1:
    
    case val2:
    
    default: // 相当于else 只有上面的case条件不满足 才会执行 default
}

多个条件结果输出 -> case语句判断是否执行 若case 子语句后面加上 fallthrough -> 则会强制执行下一个case语句 (不会去进行条件判断)

若想 退出case 穿透, 则可以在那个case里用break, 即可终止case

循环结构

for循环

循环: 做一些重复性, 有规律的操作

package main

import "fmt"

func main() {
	sum := 0 // 最终的结果
	// for 参数1:从哪开始; 参数2:从哪结束; 参数3: 控制循环变量的变化
	for i := 1; i <= 10; i++ { // 这里面的i位for循环定义的变量, 作用域在for循环内,外面无法调用
		// 计算 1+2+...+10
		sum += i
	}
	fmt.Println(sum)
}

终止循环

break: 结束整个循环

continue: 只是结束此次循环,不会向下执行, 而是执行下一次循环

小案例练习

package main

import "fmt"

// 实现一个简易的计算器
func main() {
	// 从终端接收两个数字 (暂且限定为是整型数) 以及运算逻辑的字符
	var num1 int
	var num2 int
	var cal string
	fmt.Println("请输入第一个操作数")
	fmt.Scan(&num1)
	fmt.Println("请输入第二个操作数")
	fmt.Scan(&num2)
	fmt.Println("请输入你要进行的运算逻辑: (+-*/)")
	fmt.Scan(&cal)
	switch cal {
	case "+":
		fmt.Println(num1 + num2)
	case "-":
		fmt.Println(num1 - num2)
	case "*":
		fmt.Println(num1 * num2)
	case "/":
		for num2 == 0 {
			fmt.Println("出错了, 除数不能为0!")
			fmt.Println("请重新输入被除数")
			fmt.Scan(&num2) // 外用一个循环来控制接收, 防止一直出现除数为0的非法情况
			// 直至 num2 != 0 才会跳出循环 执行除法操作
		}
		fmt.Println(num1 / num2)
	}
}
package main

import "fmt"

// 九九乘法表的简单实现
func main() {
	for i := 1; i < 10; i++ {
		for j := 1; j < 10; j++ { // or 第二个条件可以为 j <= i
			if i >= j { // 打印的是下三角的 9*9 乘法表~
				fmt.Printf("%d*%d=%d\t", j, i, i*j)
			}
			if j == 9 {
				fmt.Println()
			}
		}
	}
}

输出效果:

package main

import "fmt"

// 打印菱形
func main() {
	// 菱形是由上下两个三角形构成的 (对称的)

	// 打印上面的三角形
	for i := 1; i <= 6; i++ {
		for j := 1; j <= 6-i; j++ { // 打印空格
			fmt.Printf(" ")
		}
		// 实现三角形 1 3 5 7 9 ... 2i-1
		for k := 0; k < 2*i-1; k++ { // 打印 *
			fmt.Printf("*")
		}
		fmt.Println() // 换行
	}
	// 打印下面的三角形 (上面的三角形比下面的多一行)
	for i := 5; i >= 1; i-- {
		for j := 1; j <= 6-i; j++ { // 打印空格
			fmt.Printf(" ")
		}
		// 打印下三角形
		for k := 2*i - 1; k > 0; k-- { // 打印 *
			fmt.Printf("*")
		}
		fmt.Println() // 换行
	}
}

输出效果: