Golang 如何用单个if语句检查多个布尔值是否有超过1个为真
Go flag多布尔参数互斥校验简化方案
单if语句实现方案
你可以先定义一个极简的bool转整型的辅助函数,直接在if语句内完成计数和判断,完全符合你的需求:
// 全局定义一次即可重复使用 func btoi(b bool) int { if b { return 1 } return 0 } // 单个if完成校验逻辑 if btoi(*md5flag)+btoi(*sha1flag)+btoi(*sha256flag)+btoi(*sha512flag) > 1 { // 自定义报错处理逻辑 os.Exit(1) }
高扩展实现方案
如果后续需要新增哈希算法类flag,不需要修改判断逻辑,推荐用切片遍历方案,还支持提前终止遍历优化性能:
// 新增flag只需追加到该切片即可,无需修改后续判断逻辑 hashFlags := []bool{*md5flag, *sha1flag, *sha256flag, *sha512flag} count := 0 for _, enabled := range hashFlags { if enabled { count++ // 超过1个直接提前终止遍历,不需要走完所有元素 if count > 1 { break } } } if count > 1 { os.Exit(1) }
无额外函数的单if实现
如果你完全不想额外定义辅助函数,也可以用Go的if语句初始化特性,把计数逻辑直接封装到if内部:
if count := func() int { t := 0 if *md5flag {t++} if *sha1flag {t++} if *sha256flag {t++} if *sha512flag {t++} return t }(); count > 1 { os.Exit(1) }
内容的提问来源于stack exchange,提问作者Astro Orbis
相关产品推荐
相关产品推荐

