1v1 所有权
Rust
中所有权约束了值只能有一个所有者,当值离开作用域时,它将被销毁。
像如下代码,字符串a
如果直接移动给b
后就没法后边再去打印,因为它的所有权已经转移给了b
。
内部可变性(interior mutability
)是Rust
用来表示在一个值的外部看起来是不可变的,但是在内部是可变的。这种模式通常用于在拥有不可变引用的同时修改目标数据。
Cell
和RefCell
是Rust
提供的两种内部可变性的实现。Cell
是用于Copy
类型的,而RefCell
是用于非Copy
类型的。
不知道你有没有好奇过具体内部可变性应用在什么场景,为啥要分两种实现。
今天我们针对一些场景来聊聊这两个类型的应用。
所有权是 Rust
很有意思的一个语言特性,但对于初学者却是一个比较有挑战的内容。
今天尝试用代码示例来聊聊 Rust
的所有权是什么,以及为什么要有所有权。希望能给初学的朋友一点帮助。
Tips:文中代码有相应注释,建议可以先不用纠结细节,关注整体。后边可以再挨个去研究具体代码细节
提到OAuth2
,大家多少都有些了解。
不了解的话可以先看下之前的简单聊聊鉴权背后的那些技术先回顾一下基本概念和流程。
简单来说,以google
授权为例,一般就是通过用户授权页面登录google
账号,再跳转用code
换取到相应权限的token
,就可以代表用户去发起一些google api
的请求。
直接代码实现这套授权逻辑并不复杂,不过如果还需要接入facebook
授权,instagram
授权呢,总不能挨个去实现一遍吧。
最好能有一套通用的解决方案来解放双手, 今天我们就聊聊如何用keycloak
实现一套通用的身份验证和授权管理方案。
提前说明,无法本地复刻的技术方案不利于理解,也不利于方案探讨。虽然本文章所用代码是使用了
rust
的axum
框架(为啥?因为rust
is future!)+keycloak
,但从服务启动到keycloak
服务及相关配置,都用docker-compose+terraform+shell
脚本化管理,可100%本地复刻,欢迎本地尝试。(当然我说的是Mac
下)代码地址: https://github.com/NewbMiao/axum-koans
最近开始学习《陈天 · Rust 编程第一课》,在用docker
镜像打包构建代码示例时,每次都会在更新crate.io
索引上等上一会,即便在没有修改Cargo.tomal
依赖的前提下。
想着难道没有办法缓存下更新么,于是就有了这篇新手踩坑指南。
最近弄了一个keycloak
鉴权相关demo(地址附文末), 可以让不熟悉的keycloak
的同学有一个快速、直观的了解。
今天结合背后的技术概念,简单聊聊:鉴权(authentication
)和授权(authorization
)以及Oauth2
、OpenID Connect
、JWT
和 JWKS
。
ringbuffer
,是环形缓存区, 或叫环形队列。
不同于一般常见的队列,环形队列收尾相连,通过移动指针来控制队列中内容的读写。
这样做有什么好处呢?
最大的好处是环形队列出队(读取)后,不需要对后续队列内容进行搬移,可以后续由入队(写入)覆盖。
下面来看下一种常见的实现方式, 通过读写指针计数来实现环形队列
先过一遍代码,后边会有图解版说明,方便理解
代码参考自鸟窝无限缓存 channel-chanx
今天在修正昨天的文章《orDone的两种实现》中的压测代码时,无意发现其中的二分递归版的代码是有问题的。
主要是goroutine
泄露的问题,下边简单说明下,也参考自文章记一次学习 orDone 模式爬坑经历