面向过程编程
- 自上而下的执行
面向对象编程
- 将事物抽象成一个个对象, 然后用程序去模拟对象, 进行一些个性化的操作实现。
-
选择结构
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() // 换行
}
}
输出效果: