
本文介绍在 Go 中将 HTML 多选表单(如权限选择框)的选中项映射为紧凑的二进制字符串(如 "0111"),利用位运算替代冗长的 if/else,实现高性能、可扩展的权限编码方案。
本文介绍在 go 中将 html 多选表单(如权限选择框)的选中项映射为紧凑的二进制字符串(如 `"0111"`),利用位运算替代冗长的 if/else,实现高性能、可扩展的权限编码方案。
在 Web 开发中,常需将用户通过 选择的权限(如 create、view、edit、delete)转换为结构化标识——例如生成固定长度的二进制字符串 "1001" 表示仅启用 create 和 delete。若采用传统条件判断链,不仅代码臃肿、难以维护,还无法自然支持权限组合校验与扩展。更优雅的解法是基于位运算的权限编码模型。
该模型将每个权限赋予唯一且互斥的 2 的幂次整数值:
|=
- 选中
view+edit→2 | 4 = 6(二进制0110) - 选中
create+delete→1 | 8 = 9(二进制1001)
接下来,只需将整数转为指定长度的二进制字符串即可。以下为完整处理函数:
import "fmt"
func rightsToBinaryString(rights int, totalBits int) string {
if totalBits = 0; i-- {
if rights&(1<p>⚠️ <strong>注意事项</strong>: </p>
- 权限常量必须严格为
1 形式,确保无重叠位; -
rightsToBinaryString中totalBits应与权限总数一致(本例为 4),避免高位缺失; - 若需反向解析(从
"0110"还原为["view","edit"]),可遍历每一位并用&检查对应权限位; - 此方案天然支持权限交集(
a & b)、并集(a | b)、差集(a &^ b)等高级操作,远超字符串拼接能力。
该设计兼顾简洁性与工程健壮性,是处理布尔型多选项映射的经典范式。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











