Appearance
Go 条件判断
作者: 小满zs 链接:https://go-docs.pages.dev/
北冥神功(太玄经)
go
package main
import "fmt"
type Person struct {
Name string
Age int
Sex string
}
func main() {
person := Person{
Name: "张三",
Age: 18,
Sex: "男",
}
if person.Age >= 18 {
fmt.Println("成年")
} else {
fmt.Println("未成年")
}
}我们定义了一个 Person 结构体,包含 Name、Age、Sex 三个字段。
然后创建了一个实例,判断其年龄是否满 18 岁:满 18 岁输出「成年」,否则输出「未成年」。
这就是最基本的 if / else 二选一判断。
多条件判断
go
package main
import "fmt"
type Person struct {
Status string
}
func main() {
person := Person{
Status: "在线",
}
if person.Status == "在线" {
fmt.Println("在线")
} else if person.Status == "离线" {
fmt.Println("离线")
} else if person.Status == "忙碌" {
fmt.Println("忙碌")
} else {
fmt.Println("未知状态")
}
}当需要处理三种及以上的分支时,可以在 if 后面连续使用 else if,从上到下依次判断,命中第一个为真的分支后就不再往下执行。
最后的 else 用于兜底,处理所有未匹配的情况。
上面示例模拟了用户在线状态:Status 为「在线」「离线」「忙碌」时分别输出对应文字,其他值则输出「未知状态」。
同样的逻辑,用 switch 写会更简洁——把要判断的值写在 switch 后面,每个 case 对应一种取值:
go
package main
import "fmt"
type Person struct {
Status string
}
func main() {
person := Person{
Status: "在线",
}
switch person.Status {
case "在线":
fmt.Println("在线")
case "离线":
fmt.Println("离线")
case "忙碌":
fmt.Println("忙碌")
default:
fmt.Println("未知状态")
}
}switch 会拿 person.Status 与每个 case 逐一比较,匹配到就执行对应分支。Go 的 switch 默认不会穿透到下一个 case(不需要写 break)。
所有 case 都不匹配时,执行 default 分支。
| 写法 | 适用场景 |
|---|---|
| if / else if | 条件各不相同,不好抽成一个表达式 |
| switch | 表达式 同一个值匹配多种固定取值(如状态、等级、星期) |
逻辑嵌套
go
package main
import "fmt"
type Person struct {
Name string
Age int
Gender string
}
func main() {
person := Person{
Name: "张三",
Age: 18,
Gender: "男",
}
if person.Age >= 18 {
if person.Gender == "男" {
fmt.Println("成年男性")
} else {
fmt.Println("成年女性")
}
} else {
fmt.Println("未成年")
if person.Gender == "男" {
fmt.Println("未成年男性")
} else {
fmt.Println("未成年女性")
}
}
}多个if条件判断可以嵌套使用,我们首先判断年龄是否等于18,如果等于18,则再判断性别是否等于"男",如果等于"男",则输出"成年男性",否则输出"成年女性"。
如果不等于18,则输出"未成年",再判断性别是否等于"男",如果等于"男",则输出"未成年男性",否则输出"未成年女性"。
这就是一个基本的逻辑嵌套。当然也不是只能嵌套两层,可以嵌套多层,但是要注意逻辑的正确性。
逻辑运算符
判断条件经常需要组合多个表达式,常用的逻辑运算符如下:
| 运算符 | 含义 | 示例 | 为真条件 |
|---|---|---|---|
| && | 并且 | a && b | a、b 都为真 |
| || | 或者 | a || b | a、b 至少一个为真 |
| ! | 取反 | !a | a 为假 |
并且(&&)
go
age := 18
sex := "男"
if age >= 18 && sex == "男" {
fmt.Println("成年男性")
}&&表示并且:左右两边条件都为真,整个表达式才为真。上面只有「年满 18 岁」且「性别为男」时,才会打印「成年男性」。
或者(||)
go
age := 33
if age == 18 || age == 19 {
fmt.Println("18 岁或 19 岁")
} else {
fmt.Println("其他年龄")
}|| 表示或者:左右两边只要有一个为真,整个表达式就为真。上面当年龄是 18 或 19 时走 if 分支,否则走 else。
取反(!)
go
isLogin := false
if !isLogin {
fmt.Println("请先登录")
}! 把布尔值反过来:!true 为 false,!false 为 true。常用于「不满足某条件时」的分支判断。
作业
基础判断:声明一个
int类型的分数变量,用if / else if / else判断等级:90 分及以上为「优秀」,60~89 为「及格」,60 分以下为「不及格」,并打印结果。答案
govar Score int = 60 if Score >= 90 { fmt.Println("优秀") } else if Score >= 60 && Score <= 89 { fmt.Println("及格") } else { fmt.Println("不及格") }switch 练习:定义一个
string变量表示星期几(如 "周一"),用switch匹配并打印对应提示;未匹配时走default,输出「无效的星期」。答案
goweek := "周二" switch week { case "周一": fmt.Println("肉身赴刑,万念俱灰") case "周二": fmt.Println("满腔怨气,见谁怼谁") case "周三": fmt.Println("困意顶峰,半死不活") case "周四": fmt.Println("疯狂摸鱼,心飞周末") case "周五": fmt.Println("垂死惊起,血脉觉醒") case "周六": fmt.Println("肆意挥霍,报复熬夜") case "周七": fmt.Println("白天装傻,夜半渡劫") default: fmt.Println("无效的星期") }状态判断:参照文中的
Person结构体,将Status分别设为「在线」「离线」「忙碌」和一个自定义值,分别运行if / else if和switch两个版本,观察输出是否一致。答案
gotype Person struct { Name string Age int Gender string Score int Status string } p := Person{ Name: "里斯", Age: 18, Gender: "男", Score: 30, Status: "忙碌", }goif p.Status == "在线" { fmt.Println("他时刻准备着") } else if p.Status == "离线" { fmt.Println("他下班了") } else if p.Status == "忙碌" { fmt.Println("正在起飞") } else { fmt.Println("已离职") }goswitch p.Status { case "在线": fmt.Println("他时刻准备着") case "离线": fmt.Println("他下班了") case "忙碌": fmt.Println("正在起飞") default: fmt.Println("已离职") }逻辑运算符:声明
age和hasTicket两个变量,用&&判断「年满 18 岁且已购票」方可入场;再改用||判断「会员或年龄大于 60 岁」可享受优惠,分别打印结果。答案
goage, hasTicket, isVIP := 18, "已购票", false if age >= 18 && hasTicket == "已购票" { if age > 60 || isVIP { fmt.Println("尊享优惠") } fmt.Println("通过") }综合练习:定义包含
Name、Age、Score的结构体,结合if嵌套判断:年满 18 且分数不低于 60 才输出「合格」,否则输出「不合格」,并带上姓名。答案
gotype Person struct { Name string Age int Gender string Score int Status string } p := Person{ Name: "里斯", Age: 18, Gender: "男", Score: 30, Status: "忙碌", }goif p.Age >= 18 && p.Score >= 60 { fmt.Println("合格") } else { fmt.Printf("%s不合格", p.Name) }
📌 评论规则
需要 GitHub 账号登录 禁止发布广告、无关内容 请保持友善讨论