go 实现用户特权判断的例子
发布日期:2021-08-21 02:35:06 浏览次数:17 分类:技术文章

本文共 3302 字,大约阅读时间需要 11 分钟。

需求:实现用户特权,可以满足下面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 << 0	DaRen     = 1 << 1	Vip       = 1 << 2	SuperVip  = 1 << 3	LanZhuan  = 1 << 4	HongZhuan = 1 << 5)type User struct {	name string	flag 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 & flag	return result == flag}func auth() {	var user User	user.name = "test01"	user.flag = 0	result := 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()}

 

转载地址:https://blog.csdn.net/weixin_33708432/article/details/86255820 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:终端、作业控制与守护进程
下一篇:elastricsearch学习笔记

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月23日 23时36分47秒