核心思想:代码不是写给机器看的,是写给人看的。
你的同事、未来的你,甚至半夜 Debug 的你——都值得更清晰、更轻松的代码!
一、直接返回布尔表达式:别绕弯子!
看看这个函数:
func NeedsLicense(kind string) bool {
if kind == "car" || kind == "truck" {
return true
}
return false
}
它想表达什么?“如果是小车或卡车,就需要驾照”。
但 if ... return true; else return false 就像说:“如果天是蓝的,那我就说天是蓝的;否则,我说不是。”
其实,布尔表达式本身就是 true 或 false!
✅ 直接写成:
func NeedsLicense(kind string) bool {
return kind == "car" || kind == "truck"
}
- 更短 ✅
- 更清晰 ✅
- 不需要多一层“判断壳” ✅
💡 小贴士:只要函数返回
bool,而你的逻辑最终是一个条件判断——那就直接return 条件!
二、别用 strings.Compare,除非你真需要三路比较
再看这个函数:
func ChooseCar(car1, car2 string) string {
if strings.Compare(car1, car2) < 0 {
return car1
}
return car2
}
strings.Compare 返回 -1、0、+1,用于排序等场景。
但这里我们只是想知道“哪个车名更靠前”——这完全可以用 Go 原生的字符串比较!
Go 的字符串天然支持 <、>、== 操作,而且更快、更易读。
✅ 改成:
func ChooseCar(car1, car2 string) string {
if car1 < car2 {
return car1
}
return car2
}
现在,任何人一眼就能看懂:“选字典序更小的那个”。
📌 官方文档也说:
“It is usually clearer and always faster to use the built-in string comparison operators.”
三、条件分支按“线性顺序”排列,别跳来跳去!
来看一个二手车估价函数:
func CalculateResellPrice(originalPrice, age float64) float64 {
if age < 3 {
return originalPrice * 0.8
} else if age >= 10 {
return originalPrice * 0.5
} else {
return originalPrice * 0.7
}
}
问题在哪?
你先看“小于3岁”,然后突然跳到“大于等于10岁”,最后才处理中间的“3~9岁”。
这就像看地图时:先看北京,再看广州,最后才看上海——打乱了大脑的自然阅读流!
我们的大脑习惯从左到右、从上到下、从小到大的线性思维。
✅ 优化思路:
- 去掉多余的
else - 按年龄从小到大排列条件
func CalculateResellPrice(originalPrice, age float64) float64 {
if age < 3 {
return originalPrice * 0.8 // 新车
}
if age < 10 {
return originalPrice * 0.7 // 中年车
}
return originalPrice * 0.5 // 老车
}
现在,逻辑像一条平滑的坡道:
0 → 3 → 10,一路向下,毫不费力。
🎯 设计原则:
- 尽量让主流程靠左对齐(减少嵌套)
- 条件范围按自然顺序排列(如时间、数值、字母)
四、总结:写 Go,要“懒”得聪明
| 坏习惯 | 好习惯 | 为什么更好 |
|---|---|---|
if cond { return true } else { return false } | return cond | 少写两行,少一个脑回路 |
用 strings.Compare(a, b) < 0 | 用 a < b | 更快、更直观 |
| 条件跳跃(<3, ≥10, else) | 条件线性(<3, <10, else) | 符合人类直觉 |
五、这些技巧能提升什么?
- ✅ 降低认知负荷:别人读你代码时,不需要“解码”你的逻辑
- ✅ 减少 Bug:越简单的逻辑,越不容易出错
- ✅ 提升 Review 效率:PR 里少争论“能不能简化”,多聚焦业务逻辑
🚗 举个生活化例子:
写代码就像给朋友指路。
你说:“往前走,看到红绿灯左转,第二个路口右转” —— 清晰!
别说:“如果你没看到超市就继续走,但如果看到银行就回头,除非今天是周二……” —— 谁记得住?
