需求:实现用户特权,可以满足下面1个或多个条件

  • 红名
  • 达人
  • vip会员
  • vip超级会员
  • 蓝钻用户
  • 红钻用户

1、实现方法一:可以根据数据库字段,每个特权用一个字段,进行判断
缺点:每增加一个特权,要进行表字段扩展,代码修改。

2、实现方法二:用一个字段表示多个特权,这个方式需要用到位操作概念

假设定义一个8位无符号int,它的二进制表示如下,每个位置用0、1表示

红钻  蓝钻 超级vip  vip   达人   红名
 0        0        0        0        0        0        0        0

程序实现逻辑:

一、设置其中一位为1
用1 左移 n 与目标数做 或操作

二、判断其中一位是否等于1
用1 左移 n 与目标数做 &操作

三、清除其中一位
用1 左移 n 与目标数做 异或操作

package mainimport ("fmt"
)/*
需求:实现用户用户特权,可以满足下面1个或多个条件
1. 红名
2. 达人
3. Vip会员
4. vip超级会员
5. 蓝钻用户
6. 红钻用户实现方法一:可以根据数据库字段,每个特权用一个字段,进行判断
缺点:每增加一个特权,要进行表字段扩展,代码修改实现方法二:用一个字段表示多个特权,这个方式需要用到位操作概念假设定义一个8位无符号int,它的二进制表示如下,每个位置用0、1表示红钻   蓝钻  超级vip  vip   达人   红名
0      0      0      0      0      0      0      0一、设置其中一位为1
用1 左移 n 与目标数做 或操作二、判断其中一位是否等于1
用1 左移 n 与目标数做 &操作三、清除其中一位
用1 左移 n 与目标数做 异或操作代码实现如下:*/const (HongMing  = 1 << 0DaRen     = 1 << 1Vip       = 1 << 2SuperVip  = 1 << 3LanZhuan  = 1 << 4HongZhuan = 1 << 5
)type User struct {name stringflag uint8
}func set_flag(user User, isSet bool, flag uint8) User {if isSet == true {user.flag = user.flag | flag} else {user.flag = user.flag ^ flag}return user
}func is_set_flag(user User, flag uint8) bool {result := user.flag & flagreturn result == flag
}func auth() {var user Useruser.name = "test01"user.flag = 0result := is_set_flag(user, HongMing)fmt.Printf("user is hongming:%t\n", result)user = set_flag(user, true, HongMing)result = is_set_flag(user, HongMing)fmt.Printf("user is hongming:%t\n", result)//user = set_flag(user, false, HongMing)//result = is_set_flag(user, HongMing)//fmt.Printf("user is hongming:%t\n", result)fmt.Printf("%v\n", user.flag)result = is_set_flag(user, DaRen)fmt.Printf("user is DaRen:%t\n", result)user = set_flag(user, true, DaRen)result = is_set_flag(user, DaRen)fmt.Printf("user is DaRen:%t\n", result)//user = set_flag(user, false, DaRen)//result = is_set_flag(user, DaRen)//fmt.Printf("user is DaRen:%t\n", result)fmt.Printf("%v\n", user.flag)result = is_set_flag(user, Vip)fmt.Printf("user is Vip:%t\n", result)user = set_flag(user, true, Vip)result = is_set_flag(user, Vip)fmt.Printf("user is Vip:%t\n", result)//user = set_flag(user, false, Vip)//result = is_set_flag(user, Vip)//fmt.Printf("user is Vip:%t\n", result)fmt.Printf("%v\n", user.flag)result = is_set_flag(user, SuperVip)fmt.Printf("user is SuperVip:%t\n", result)user = set_flag(user, true, SuperVip)result = is_set_flag(user, SuperVip)fmt.Printf("user is SuperVip:%t\n", result)//user = set_flag(user, false, SuperVip)//result = is_set_flag(user, SuperVip)//fmt.Printf("user is SuperVip:%t\n", result)fmt.Printf("%v\n", user.flag)result = is_set_flag(user, LanZhuan)fmt.Printf("user is LanZhuan:%t\n", result)user = set_flag(user, true, LanZhuan)result = is_set_flag(user, LanZhuan)fmt.Printf("user is LanZhuan:%t\n", result)//user = set_flag(user, false, LanZhuan)//result = is_set_flag(user, LanZhuan)//fmt.Printf("user is LanZhuan:%t\n", result)fmt.Printf("%v\n", user.flag)result = is_set_flag(user, HongZhuan)fmt.Printf("user is HongZhuan:%t\n", result)user = set_flag(user, true, HongZhuan)result = is_set_flag(user, HongZhuan)fmt.Printf("user is HongZhuan:%t\n", result)//user = set_flag(user, false, HongZhuan)//result = is_set_flag(user, HongZhuan)//fmt.Printf("user is HongZhuan:%t\n", result)fmt.Printf("%v\n", user.flag)}func main() {auth()
}

go 实现用户特权判断的例子相关推荐

  1. php定位和天气,基于thinkphp实现依据用户ip判断地理位置并提供对应天气信息的应用...

    基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用 我们都知道,在很多的网站都提供了给用户提供天气预报的功能,有时会发现,用户即使不输入任何和自己有关的地理位置信息,同样的网站也 ...

  2. php定位和天气,基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用_PHP教程...

    基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用 我们都知道,在很多的网站都提供了给用户提供天气预报的功能,有时会发现,用户即使不输入任何和自己有关的地理位置信息,同样的网站也 ...

  3. python 用户登录判断

    4.1python 用户登录判断 代码: name='admin' password='123456' n=0 while(n<=3):iname=input("请输入用户名:&quo ...

  4. 金和C6协同办公中对在线用户的判断

    在金和C6版本中,在线用户的判断和IOAS版不同,在C6的数据库中有一个users表,longinstatus字段用于用户是否在线,为1认为在线,为0认为不在线,所以可用一条update语句来实现全体 ...

  5. Linux下,文件权限,访问控制列表ACL,UGO的补充,文件用户特权suid

    标题Linux下,文件权限,访问控制列表ACL,UGO的补充 一.访问控制列表 ACL access control list 访问 控制 列表 用于限制用户对文件的访问, 二.ACL是对UGO的补充 ...

  6. 机器学习:基于Knn算法的用户属性判断方案设计

    本文作者通过Knn算法进行了一次用户判断预测的流程,文章为作者根据自身经验所做出的总结,希望通过此文能够加深你对Knn算法的认识. knn算法简介 K最近邻(k-Nearest Neighbor,KN ...

  7. python 通过ip获取城市_Python根据用户IP判断所属城市 !

    事情源于7月以来,SEO销售额下降比较明显,老板让我想想办法提升SEO销售额. 而销量=流量×转化率×客单价,客单价我这边没法控制,只能从流量和转化率两个方向入手了.但对SEO来讲,短时间大幅度提升S ...

  8. php定位和天气,基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用...

    我们都知道,在很多的网站都提供了给用户提供天气预报的功能,有时会发现,用户即使不输入任何和自己有关的地理位置信息,同样的网站也可以去判断地理位置并且显示天气信息,我们可能会想到用ip去判断地理位置,的 ...

  9. shell进入特权模式_用户,特权,全局模式

    了解用户模式.特权模式和全局模式 首先我们启动路由器这是我们发现命令行变为: R1>         // 用户模式的标志 现在我们来看一看在用户模式下我们可以进行哪些操作: R1>? E ...

最新文章

  1. LeetCode简单题之判断国际象棋棋盘中一个格子的颜色
  2. Fastcgi是什么
  3. MySQL优化经验-值得细细品读
  4. 第一章1.1 回顾CMOS的一些知识
  5. 【在线报表设计】提升报表外观的15个技巧
  6. 1012 The Best Rank (25)
  7. DrawerLayout 使用
  8. Linux 中Vim 命令大全
  9. Java多窗口编程示例
  10. ocx控件查看_控制HTML帮助查看器OCX控件
  11. 淘宝新店刚开详情页到底需要怎么做
  12. ubuntu 日常使用问题记录
  13. linux pthread_cleanup_push 线程实现,线程清理(pthread_cleanup_push函数和pthread_cleanup_pop函数)...
  14. Android性能优化之内存优化
  15. java一只母牛 一年生头小牛_Java实现:工厂有一头母牛,一年生一头小母牛,小母牛五年后可以生小牛,问20年工厂有多少头牛?...
  16. 罗振宇“时间的朋友”跨年演讲:为做事的人服务 准确抓住小趋势
  17. 机器学习项目汇总,值得收藏!
  18. M2DGR:多源多场景 地面机器人SLAM数据集(ICRA 2022 )
  19. 忠告,男人、女人各100条
  20. 网络常见面试题总结(四)

热门文章

  1. 2020年高教社杯全国大学生数学建模C题中小微企业信贷决策(Matlab代码)
  2. 惠普HP LaserJet 4200n 打印机驱动
  3. ECB:在固态硬盘通过使用专用闪存控制器实现一种有效的Copy-Back操作策略 阅读总结
  4. 面向对象编程的23种设计模式
  5. 极智AI | 再谈昇腾CANN量化
  6. Android短视频播放器组件库GSYVideoPlayer和仿抖音切换DKVideoPlayer可以悬浮框及滑动小屏播放
  7. 红外视频——行人识别
  8. [Java]桌球小游戏(小球任意角度碰撞)
  9. windows安装nacos步骤,还有那些坑
  10. [热拔插] 轻量级Winform插件式框架