Home

Casbin

简介 一个支持多语言的权限管理、访问控制库。支持多种控制模型: RBAC(Role Based Access Control) ACL(Access Control List) ABAC(Attribute Based Access Control) … Tutorial: https://casbin.org/docs/en/overview 模型 casbin的模型控制抽象到一个配置文件中, 主要包含: policy: 控制策略/规则 request: 访问请求, 与e.Enforce()的参数一一对应 matcher: 匹配器, 与定义的每个policy一一匹配会生成多个匹配结果 effect: 根据匹配结果决定该请求是否获得授权 示...

Read more

Docker

前言 对docker使用的一些经验总结 辅助工具 mac使用: docker-cli 常见命令 查看已启动的docker进程及详细信息(containerId, imageVersion, command, public的端口号等) docker ps 启动docker镜像 docker run -it -d --name [your_instance_name] -p [local_port]:[instance_port] -v [local_path]:[instance_path] [image:version] 示例: docker run -it -d name ubuntu-test -p 4567:22 -v /home/...

Read more

PostgreSQL学习

前言 持续更新中 基础使用 参考文档 官方手册: 英文版 中文版 pq 几年前比较流行的纯go语言编写的工具, 现维护不频繁, 官方readme建议迁移到pgx的使用: For users that require new features or reliable resolution of reported bugs, we recommend using pgx which is under active development. pgx 纯go语言编写的PostgreSQL工具, 目前较活跃, 功能较齐全 官方文档 https://pkg.go.dev/github.com/jackc/pgx/v4 具体...

Read more

golang与c++区别

前述 从c++转到golang, 有很多不习惯和新颖的地方。偶然看到一篇文章《如何避免动态语言思维写go》, 虽然写的比较粗略, 但还是提醒了我, 转语言需要去进行比较、转换编码思维。 参考 uber go style effective go 语法区别 基础 c++: int a = 1; void Func(string a) { if (a == "a") { } switch(1) { case 1: break; defualt: break; } return a == "b" ? a : "c"; } // 对于多返回结果 stru...

Read more

c++库thread实践

前述 对c++11的thread进行应用 尝试 1.两个线程交替打印字母 #include <iostream> #include <thread> #include <mutex> #include <condition_variable> void printa(bool& flag, std::mutex& mtx, std::condition_variable& cv) { for (;;) { std::unique_lock<std::mutex> la(mtx); // 利用条件变量控制unique_lock的加锁、解锁状态 ...

Read more

gitalk配置

前述 本篇主要是解决使用Gitalk插件时,登录授权报 403 的问题 问题描述 使用gitalk关联github application,借助github仓库的issue功能,可以简单的构建出githubpage的评论模块。 但是我在使用时,发现使用github登录会报很刺眼的403错误。 查找了一些文章和github的issue,发现是gitalk自身的问题: gitalk为了解决github的跨域问题,使用了一个默认的反向代理https://cors-anywhere.herokuapp.com。但是这个代理不久前被受限了,因此导致了403的问题。 问题解决 知道了问题出在代理,更换代理自然是最快的解决办法。 这里根据参考的内容,采用了cloudfare创建了一...

Read more

c++反射实现

前述 反射的概念是,比如有一个类ClassA,你想通过它的名称”ClassA”来创建一个ClassA的实例,这就叫反射。 反射在很多业务场景/框架下是非常实用的,可以大大降低业务的代码量,框架看起来也比较清晰。 c++是没有其他语言的反射机制的,只能靠手动实现。实际上就是实现一个类名称到类实例(或者创建类实例对象的函数)的一个映射。 实现 全局静态注册方法 维护一个全局静态map,在进入main之前,就将需要反射的类注册好,需要使用时获取即可。 // 实现 typedef void* (*ReflectFunc)(void); static std::map<std::string, ReflectFunc> _reflection_map; class Ha...

Read more