go 实现用户特权判断的例子
需求:实现用户特权,可以满足下面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 main import (
"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()
}
go 实现用户特权判断的例子的更多相关文章
- spring MVC使用Interceptor做用户登录判断
在任何一个项目中,我们必须要用到的就是用户登录,那么就少不了用户是否登录的判断,如果我们每一个请求都要去做一次判断,那么就会变得很麻烦,但我们复制粘贴的时候我们就要考虑我们的代码写的是不是有问题,是不 ...
- Python 操作 mongodb 亿级数据量使用 Bloomfilter 高效率判断唯一性 例子
工作需要使用 python 处理 mongodb 数据库两亿数据量去重复,需要在大数据量下快速判断数据是否存在 参考资料:https://segmentfault.com/q/101000000061 ...
- 基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用
https://blog.csdn.net/MyCodeDream/article/details/46706469 我们都知道,在很多的网站都提供了给用户提供天气预报的功能,有时会发现,用户即使不输 ...
- Django学习路13_创建用户登录,判断数据库中账号名密码是否正确
在 models.py 中设置数据库表的信息 from django.db import models # Create your models here. class User(models.Mod ...
- sql存储过程异常捕获并输出例子还有不输出过程里面判断异常 例子
编程的异常处理很重要,当然Sql语句中存储过程的异常处理也很重要,明确的异常提示能够快速的找到问题的根源,节省很多时间. 下面,我就以一个插入数据为例来说明Sql Server中的存储过程怎么捕获异常 ...
- Python 练习: 简单的用户登录判断
_user = "klvchen" _passwd = " counter = 0 while counter < 3: username = raw_input( ...
- cocos2d JS-(JavaScript) 使用特权方法的例子
function User(name,age) { var year = (new Date()).getFullYear() - age; this.getYearBorn = function ( ...
- vue中使用cookie记住用户上次选择(本次例子中为下拉框)
最近工作中碰到一个需求,添加一条数据时,自动记住上次选择的下拉框的数据,刚开始觉得没思路,后来请教了项目组长,组长直接一句,这不很简单吧,直接用cookie,我:....... 好吧,都王的差不多了, ...
- Request 获取根据页面获取用户输入判断登陆成功或者失败
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.serv ...
随机推荐
- maven + bat 实现快速编译打包模块代码
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Python Argparse模块
argparse模块 在Python中,argparse模块是标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块.argparse模块能够根据程序中的定义从sys.argv中解析 ...
- Java中的CopyOnWrite
CopyOnWrite简称COW,是一种程序设计的一种优化的策略方法,他开始的思想就是大家一起共享一件东西或商品,当一个人想要改这个事物原有的状态时,会重新复制一份出去,然后再新的事物上面改他所需要的 ...
- pycharm pip 源修改以及包管理(转载)
转载自(https://www.u3v3.com/ar/1352) pycharm下如何将默认的pip源改成国内能快速访问的源, 以及如何进行包管理 pycharm 是一款进行python项目开发的利 ...
- P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- Python中xlrd模块解析
xlrd 导入模块 import xlrd 2.打开指定的excel文件,返回一个data对象 data = xlrd.open_workbook(file) ...
- MT【280】最小值函数
已知正系数二次函数$ax^2+bx+c=0$有实数根,证明:$\min\{a,b,c\}\le\dfrac{a+b+c}{4}$ 证明:$\min\{a,b,c\}=\dfrac{a+c-|a-c|+ ...
- MT【275】拉格朗日中值定理
已知$0<x_1<c<x_2<e^{\frac{3}{2}},$且$\dfrac{1-ln(c)}{c^2} = \dfrac{x_1ln(x_2)-x_2ln(x_1)}{x ...
- 自学华为IoT物联网_11 物联网操作系统介绍
点击返回自学华为IoT物流网 自学华为IoT物联网_11 物联网操作系统介绍 1.1 物联网面临的困难 物联网终端发展面临的困难:开发者需要懂硬件和芯片的差异,自行适配硬件接口 物联网开发面临的困难 ...
- Android工程图片资源命名禁忌
Android工程中,res\drawable\ 文件夹下所有的图片资源文件命名,不允许: 1. 大写字母 从Eclipse的这个报错可以知道资源文件的命名规则. Invalid file name: ...