初始提交

This commit is contained in:
2025-08-24 01:01:26 +08:00
commit e51feb1296
35 changed files with 9348 additions and 0 deletions

View File

@@ -0,0 +1,485 @@
/*
01-if-else.go - Go 语言条件语句详解
学习目标:
1. 掌握 if 语句的基本用法
2. 理解 if-else 和 if-else if 结构
3. 学会在 if 语句中声明变量
4. 了解条件表达式的写法
5. 掌握嵌套条件语句
知识点:
- if 语句基本语法
- if-else 语句
- if-else if-else 链
- if 语句中的变量声明
- 条件表达式
- 嵌套 if 语句
- 实际应用场景
*/
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
fmt.Println("=== Go 语言条件语句详解 ===\n")
// 演示基本 if 语句
demonstrateBasicIf()
// 演示 if-else 语句
demonstrateIfElse()
// 演示 if-else if 链
demonstrateIfElseIf()
// 演示 if 语句中的变量声明
demonstrateIfWithDeclaration()
// 演示嵌套 if 语句
demonstrateNestedIf()
// 演示复杂条件表达式
demonstrateComplexConditions()
// 演示实际应用示例
demonstratePracticalExamples()
}
// demonstrateBasicIf 演示基本 if 语句
func demonstrateBasicIf() {
fmt.Println("1. 基本 if 语句:")
// 最简单的 if 语句
age := 18
if age >= 18 {
fmt.Printf(" 年龄 %d >= 18已成年\n", age)
}
// 条件为 false 的情况
score := 45
if score >= 60 {
fmt.Printf(" 分数 %d >= 60及格\n", score)
}
fmt.Printf(" 分数 %d < 60条件不满足if 块不执行\n", score)
// 布尔变量作为条件
isLoggedIn := true
if isLoggedIn {
fmt.Printf(" 用户已登录\n")
}
// 函数返回值作为条件
if isEven(10) {
fmt.Printf(" 10 是偶数\n")
}
// 注意Go 的 if 语句不需要括号,但需要大括号
fmt.Printf(" 注意: Go 的 if 条件不需要括号,但大括号是必需的\n")
fmt.Println()
}
// demonstrateIfElse 演示 if-else 语句
func demonstrateIfElse() {
fmt.Println("2. if-else 语句:")
// 基本 if-else
temperature := 25
if temperature > 30 {
fmt.Printf(" 温度 %d°C天气炎热\n", temperature)
} else {
fmt.Printf(" 温度 %d°C天气凉爽\n", temperature)
}
// 数值比较
a, b := 10, 20
if a > b {
fmt.Printf(" %d > %d\n", a, b)
} else {
fmt.Printf(" %d <= %d\n", a, b)
}
// 字符串比较
password := "123456"
if password == "admin123" {
fmt.Printf(" 密码正确\n")
} else {
fmt.Printf(" 密码错误\n")
}
// 布尔值判断
hasPermission := false
if hasPermission {
fmt.Printf(" 有权限访问\n")
} else {
fmt.Printf(" 没有权限访问\n")
}
fmt.Println()
}
// demonstrateIfElseIf 演示 if-else if 链
func demonstrateIfElseIf() {
fmt.Println("3. if-else if-else 链:")
// 成绩等级判断
score := 85
fmt.Printf(" 分数: %d\n", score)
if score >= 90 {
fmt.Printf(" 等级: A (优秀)\n")
} else if score >= 80 {
fmt.Printf(" 等级: B (良好)\n")
} else if score >= 70 {
fmt.Printf(" 等级: C (中等)\n")
} else if score >= 60 {
fmt.Printf(" 等级: D (及格)\n")
} else {
fmt.Printf(" 等级: F (不及格)\n")
}
// 年龄段分类
age := 25
fmt.Printf(" 年龄: %d\n", age)
if age < 13 {
fmt.Printf(" 年龄段: 儿童\n")
} else if age < 20 {
fmt.Printf(" 年龄段: 青少年\n")
} else if age < 60 {
fmt.Printf(" 年龄段: 成年人\n")
} else {
fmt.Printf(" 年龄段: 老年人\n")
}
// BMI 指数判断
weight, height := 70.0, 1.75
bmi := weight / (height * height)
fmt.Printf(" BMI: %.1f\n", bmi)
if bmi < 18.5 {
fmt.Printf(" 体重状况: 偏瘦\n")
} else if bmi < 24 {
fmt.Printf(" 体重状况: 正常\n")
} else if bmi < 28 {
fmt.Printf(" 体重状况: 偏胖\n")
} else {
fmt.Printf(" 体重状况: 肥胖\n")
}
fmt.Println()
}
// demonstrateIfWithDeclaration 演示 if 语句中的变量声明
func demonstrateIfWithDeclaration() {
fmt.Println("4. if 语句中的变量声明:")
// 在 if 语句中声明变量
if num := 42; num > 0 {
fmt.Printf(" 在 if 中声明: num = %d > 0\n", num)
// num 在这个 if 块中可用
}
// num 在这里不可用
// 实际应用:字符串转数字
str := "123"
if value, err := strconv.Atoi(str); err == nil {
fmt.Printf(" 字符串 \"%s\" 转换为数字: %d\n", str, value)
} else {
fmt.Printf(" 字符串 \"%s\" 转换失败: %v\n", str, err)
}
// 检查字符串长度
username := "admin"
if length := len(username); length >= 5 {
fmt.Printf(" 用户名 \"%s\" 长度 %d >= 5符合要求\n", username, length)
} else {
fmt.Printf(" 用户名 \"%s\" 长度 %d < 5太短\n", username, length)
}
// 计算并判断
if result := calculateDiscount(1000); result > 0 {
fmt.Printf(" 购买金额 1000折扣: %.2f\n", result)
} else {
fmt.Printf(" 购买金额 1000无折扣\n")
}
// 多个变量声明
if x, y := 10, 20; x+y > 25 {
fmt.Printf(" x=%d, y=%d, x+y=%d > 25\n", x, y, x+y)
}
fmt.Println()
}
// demonstrateNestedIf 演示嵌套 if 语句
func demonstrateNestedIf() {
fmt.Println("5. 嵌套 if 语句:")
// 用户登录验证
username := "admin"
password := "123456"
isActive := true
fmt.Printf(" 用户登录验证:\n")
if username == "admin" {
fmt.Printf(" 用户名正确\n")
if password == "123456" {
fmt.Printf(" 密码正确\n")
if isActive {
fmt.Printf(" 账户状态: 活跃\n")
fmt.Printf(" 登录成功!\n")
} else {
fmt.Printf(" 账户状态: 已禁用\n")
fmt.Printf(" 登录失败: 账户被禁用\n")
}
} else {
fmt.Printf(" 密码错误\n")
fmt.Printf(" 登录失败: 密码不正确\n")
}
} else {
fmt.Printf(" 用户名错误\n")
fmt.Printf(" 登录失败: 用户不存在\n")
}
// 数值范围判断
number := 15
fmt.Printf(" 数值范围判断 (number = %d):\n", number)
if number > 0 {
fmt.Printf(" 数值为正数\n")
if number < 10 {
fmt.Printf(" 数值 < 10属于个位数\n")
} else if number < 100 {
fmt.Printf(" 数值 < 100属于两位数\n")
} else {
fmt.Printf(" 数值 >= 100属于三位数或更多\n")
}
} else if number < 0 {
fmt.Printf(" 数值为负数\n")
} else {
fmt.Printf(" 数值为零\n")
}
fmt.Println()
}
// demonstrateComplexConditions 演示复杂条件表达式
func demonstrateComplexConditions() {
fmt.Println("6. 复杂条件表达式:")
// 逻辑与条件
age := 25
hasLicense := true
hasInsurance := true
if age >= 18 && hasLicense && hasInsurance {
fmt.Printf(" 年龄: %d, 有驾照: %t, 有保险: %t\n", age, hasLicense, hasInsurance)
fmt.Printf(" 可以开车\n")
}
// 逻辑或条件
isWeekend := false
isHoliday := true
if isWeekend || isHoliday {
fmt.Printf(" 周末: %t, 假日: %t\n", isWeekend, isHoliday)
fmt.Printf(" 今天不用上班\n")
}
// 复合条件
temperature := 28
humidity := 70
if (temperature > 25 && humidity > 60) || temperature > 35 {
fmt.Printf(" 温度: %d°C, 湿度: %d%%\n", temperature, humidity)
fmt.Printf(" 天气闷热,建议开空调\n")
}
// 字符串条件
email := "user@example.com"
if strings.Contains(email, "@") && strings.Contains(email, ".") {
fmt.Printf(" 邮箱 \"%s\" 格式基本正确\n", email)
}
// 数值范围条件
score := 75
if score >= 0 && score <= 100 {
fmt.Printf(" 分数 %d 在有效范围内\n", score)
if score >= 60 {
fmt.Printf(" 及格\n")
} else {
fmt.Printf(" 不及格\n")
}
} else {
fmt.Printf(" 分数 %d 超出有效范围\n", score)
}
fmt.Println()
}
// demonstratePracticalExamples 演示实际应用示例
func demonstratePracticalExamples() {
fmt.Println("7. 实际应用示例:")
// 示例1: 银行账户操作
fmt.Printf(" 示例1 - 银行账户操作:\n")
balance := 1000.0
withdrawAmount := 500.0
if withdrawAmount > 0 {
if withdrawAmount <= balance {
balance -= withdrawAmount
fmt.Printf(" 取款成功,取款金额: %.2f,余额: %.2f\n", withdrawAmount, balance)
} else {
fmt.Printf(" 取款失败,余额不足。余额: %.2f,尝试取款: %.2f\n", balance, withdrawAmount)
}
} else {
fmt.Printf(" 取款失败金额必须大于0\n")
}
// 示例2: 文件权限检查
fmt.Printf(" 示例2 - 文件权限检查:\n")
const (
READ = 1 << 0 // 001
WRITE = 1 << 1 // 010
EXECUTE = 1 << 2 // 100
)
permissions := READ | WRITE // 011
operation := "write"
if operation == "read" {
if permissions&READ != 0 {
fmt.Printf(" 允许读取文件\n")
} else {
fmt.Printf(" 没有读取权限\n")
}
} else if operation == "write" {
if permissions&WRITE != 0 {
fmt.Printf(" 允许写入文件\n")
} else {
fmt.Printf(" 没有写入权限\n")
}
} else if operation == "execute" {
if permissions&EXECUTE != 0 {
fmt.Printf(" 允许执行文件\n")
} else {
fmt.Printf(" 没有执行权限\n")
}
}
// 示例3: 购物折扣计算
fmt.Printf(" 示例3 - 购物折扣计算:\n")
purchaseAmount := 800.0
customerLevel := "gold"
isFirstPurchase := false
var discount float64
var discountReason string
if customerLevel == "platinum" {
discount = 0.2
discountReason = "白金会员"
} else if customerLevel == "gold" {
discount = 0.15
discountReason = "黄金会员"
} else if customerLevel == "silver" {
discount = 0.1
discountReason = "银牌会员"
} else {
discount = 0.05
discountReason = "普通会员"
}
// 首次购买额外折扣
if isFirstPurchase {
discount += 0.05
discountReason += " + 首次购买"
}
// 大额购买额外折扣
if purchaseAmount >= 1000 {
discount += 0.05
discountReason += " + 大额购买"
}
finalAmount := purchaseAmount * (1 - discount)
fmt.Printf(" 购买金额: %.2f\n", purchaseAmount)
fmt.Printf(" 客户等级: %s\n", customerLevel)
fmt.Printf(" 首次购买: %t\n", isFirstPurchase)
fmt.Printf(" 折扣原因: %s\n", discountReason)
fmt.Printf(" 折扣率: %.1f%%\n", discount*100)
fmt.Printf(" 最终金额: %.2f\n", finalAmount)
// 示例4: 时间段判断
fmt.Printf(" 示例4 - 时间段判断:\n")
hour := 14
var timeOfDay string
var greeting string
if hour >= 5 && hour < 12 {
timeOfDay = "上午"
greeting = "早上好"
} else if hour >= 12 && hour < 18 {
timeOfDay = "下午"
greeting = "下午好"
} else if hour >= 18 && hour < 22 {
timeOfDay = "晚上"
greeting = "晚上好"
} else {
timeOfDay = "深夜"
greeting = "夜深了"
}
fmt.Printf(" 当前时间: %d:00\n", hour)
fmt.Printf(" 时间段: %s\n", timeOfDay)
fmt.Printf(" 问候语: %s\n", greeting)
fmt.Println()
}
// 辅助函数
func isEven(n int) bool {
return n%2 == 0
}
func calculateDiscount(amount float64) float64 {
if amount >= 1000 {
return amount * 0.1 // 10% 折扣
} else if amount >= 500 {
return amount * 0.05 // 5% 折扣
}
return 0 // 无折扣
}
/*
运行这个程序:
go run 01-if-else.go
学习要点:
1. if 语句的条件不需要括号,但大括号是必需的
2. 可以在 if 语句中声明变量,作用域仅限于 if-else 块
3. if-else if-else 链可以处理多个条件分支
4. 支持复杂的条件表达式,使用 &&、|| 等逻辑运算符
5. 嵌套 if 语句可以处理复杂的逻辑判断
6. Go 没有三元运算符,使用 if-else 代替
最佳实践:
1. 条件表达式要清晰易懂
2. 避免过深的嵌套,考虑提前返回或使用函数分解
3. 复杂条件可以提取为变量或函数
4. 使用有意义的变量名和注释
5. 考虑使用 switch 语句替代长的 if-else if 链
常见应用场景:
1. 用户输入验证
2. 权限检查
3. 数值范围判断
4. 状态判断
5. 错误处理
6. 业务逻辑分支
*/