自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 go web框架实现与使用

Server定义、路由树、context上下文、AOP方案(Middleware)、静态资源服务与文件处理、页面渲染template、Session、优雅退出。测试代码:web/test/graceful_shutdown_test.go 注意:该代码必须放在main函数下运行,test文件下无法监听到退出信号。支持路由:静态路由、参数路由(/a/:id)、正则匹配、动态路由(通配符 /a/*),路由命中优先级按照前面的顺序。测试代码:web/test/server_route_test.go。

2025-06-19 00:37:34 925

原创 go orm框架 支持分库分表查询

ORM框架支持基于Builder模式构建SQL查询,利用reflect与unsafe技术处理结果集,同时具备元数据维护、中间件集成、链式调用、事务管理和分库分表查询能力。duplicateKey语句: on conflict columnName do update set col1=exclued.col1。duplicateKey语句:on duplicate key update col1=values(col1)维护数据结构(如User)和数据库中相应表、字段的关系。quoter -> 双引号。

2025-06-18 22:34:59 615

原创 go 并发队列、优先级队列、延迟队列

好处:b.queue = b.queue[1:]会引起内存频繁分配,ringBuffer复用固定资源。等待时使用for,而不是if // 广播唤醒多个,但只有一个抢到了锁,其他需要重新等待枪锁。好处: ringBuffer使用固定内存,可能实际不需要,链表支持动态连接。ringBuffer比链表的优势:支持复杂操作,如随机访问。由于sync.cond没有超时控制,所以自行设计cond。ringBuffer替代[]*T。链表替代ringBuffer。使用cond进行超时阻塞控制。

2025-06-17 15:17:28 440

原创 go 服务注册与发现

注册中心连接不上服务端会进行重试,若多次重试连接不上,就认为服务端挂了,通知客户端。可能是因为客户端和服务端中有防火墙,当服务端连接不上时,客户端需要从本地的可用节点列表中移除相应的服务实例;从可用性的角度考虑,客户端继续服务,并尝试重新连接注册中心,这段时间使用缓存数据。若是服务端主动续约,没有心跳的情况:取决于租约超时时间和注册中心租约超时重试机制。从一致性的角度考虑,客户端立即终止服务调用,直到与注册中心恢复连接。若是注册中心主动与服务端保持心跳的情况:取决于心跳重试的次数和间隔。

2025-06-09 19:55:14 951

原创 go 连接池

在简单tcp服务中,每次请求耗费一个连接net.dial()。所以我们可以考虑复用连接,实现连接池。说明:仅简单测试,未提供完备测试用例。

2025-06-09 14:29:54 236

原创 go 缓存

一般情况下,击穿不会有问题,访问一次db就能回写redis;key数量超大时,需要限制,比如限制轮询key的个数或者轮询时长。问题:定时轮询不能访问到所有key,所以有过期key没处理,不能单独定时轮询。大量goroutine同时访问一个key时,singleflight会让其他的原地等待,只有一个访问db。存在第三方比如bloomFilter,先确认db上是否hasKey,存在再请求db。穿透:大量不存在的key访问redis不存在,打到db上。击穿:key不在缓存中,但在db中。

2025-06-03 16:32:31 373

原创 go 任务池

任务池用来管理并发任务,没有任务池面临的问题:并发任务来一个开一个goroutine。无缓冲缓冲小了会阻塞任务提交;缓冲过大会导致资源浪费。快任务、慢任务分开放在两个任务池中配置、处理。// 这篇文章我喜欢他的场景示例和数据对比。task pool中task介绍。// todo: 压缩图片上传。

2025-05-30 13:43:30 314

原创 go 消息队列 涉及channel、ring buffer

文章主要是针对消息队列的思考,消息队列核心实现使用了channel、ring buffer和map结构。文章开篇介绍了channel的实现原理,然后是对消息队列的分析与实现,其中消息缓冲使用ring buffer存储,所以在文章第三部分介绍了ring buffer。

2025-05-29 15:33:19 328

原创 go 文件上传系统

文件上传系统是前后端分离项目,实现普通文件上传、大文件分片上传功能;大文件分片上传提供断点续传、并发上传等能力,通过分片md5、文件md5验证完整性。

2025-04-28 09:58:56 243

原创 go 用户身份认证的核心机制

readme&源码: https://gitee.com/luyue_zhang/sso_oauth2/blob/master/single_sign_on/readme.md。readme&源码: https://gitee.com/luyue_zhang/sso_oauth2/blob/master/oauth2/readme.md。readme&源码: https://gitee.com/luyue_zhang/sso_oauth2/blob/master/sso/readme.md。

2025-04-08 10:12:52 222

原创 单点登录&OAuth2.0

在多系统共存环境下,一个系统登录后,其他系统无需登录;即一处登录后获得所有系统信任。全局独一份内容,比如是否登录存中央session中;个性信息存在自己的服务中。说明:此处代码实现分别存储session的sso。多设备指手机、笔记本、电脑等,需要分别登录。负载均衡、熔断限流、来源验证 // 最好网关做。鉴权:是合法用户的你有哪些权限。

2025-04-02 17:11:11 324

原创 Cookie、Session和Token的关系和区别

Cookie是服务端发送给浏览器并储存在本地的一小段文本数据(通常<=4KB),浏览器后续请求自动携带该数据回传服务端核心作用会话跟踪:记录用户行为,如购物车商品身份认证:存储用户登录后的身份标识,如session_idSession是服务器为每个用户分配的唯一会话标识,存储用户登录状态或临时数据与cookie的关系服务端通过Cookie将session_id返回客户端客户端后续请求携带该id,服务端通过该id从内存或数据库中查找对应的会话数据为什么需要Session。

2025-04-02 16:58:17 458

原创 go 微服务架构

比如缓存模式下,正常情况下,缓存中查不到就查询数据库;当触发限流后,缓存中查不到可以返回默认值或错误。可以结合failover考虑,返回客户端302重定向,让客户端重新找一个可用节点。当触发限流后,服务接收到请求直接返回202,再异步处理请求。触发限流后直接返回固定响应这一步可以在服务拦截器里实现。故障检测触发限流,限流缓解故障影响、检测优化限流策略。微服务框架服务于微服务架构,核心:通信、治理。漏桶、令牌桶、固定窗口、滑动窗口。go 微服务框架-广播实现讲解。分而治之,独立部署、治理。

2025-03-20 18:36:45 411

原创 go 代码生成技术

编译器地址:https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4下载 win-64版本,把bin文件夹的路径放到环境变量path下相关教程:https://blog.youkuaiyun.com/weixin_51952373/article/details/123098967命令:go install github.com/golang/protobuf/protoc-gen-gogitee: https://gitee.com/luyue_

2025-03-17 14:59:24 323

原创 go rpc调用

【代码】go 简版pool连接池实现。

2025-03-11 18:02:15 275

原创 go 原子操作、加锁、MVCC多版本并发控制

MVCC是Mysql InnoDB用于进行数据并发访问控制的协议。MVCC主要是通过版本链实现的。在InnoDB引擎里面,每行都有额外两列:trx_id和roll_ptr。trx_id表示修改该行数据的事务ID。roll_ptr表示回滚指针。InnoDB引擎通过回滚指针将不同版本串联起来,构成版本链。这些串联起来的历史版本,存在undolog里面。当某一事务发起查询时,MVCC会根据事务的隔离级别生成相应的read view, 返回合适的数据。

2025-02-26 11:15:10 506

原创 go 反射reflect速记

reflect go 基础梳理

2025-02-14 10:18:33 260

原创 批量清除本地分支

在多个项目频繁切换、快速迭代过程中,我们在本地开发环境创建过许多feature、bugfix分支没有清理。我们期望能够提供一键清空本地无用分支的脚本。核心:批量操作+自定义指令。

2023-08-29 17:13:43 209 1

原创 flex布局实现等比5个盒子--logo配置组件

1. 整体使用弹性布局,整体宽度高度由空间大小决定2. 5个box等比展示3. 按钮使用固定高度,绝对底部4. title、img、description按内容大小自动分配空间

2023-08-01 14:55:38 381 1

原创 事件循环与任务队列

JS单线程意味着它同一时间只能做一件事,所有的任务需要排队。而CPU的处理速度比I/O设备快很多,等待I/O设备是不合理的,所以同步任务在主线程调用栈中调用,异步任务在任务队列中排队。当调用栈清空,就去任务队列里拿一个过来task,反复这个过程。

2023-01-04 21:34:32 126

原创 数组方法:多维数组拍平小发现、创建定长等值数组、数组排序

数组方法:多维数组拍平小发现、创建定长等值数组、数组排序

2023-01-04 21:24:54 188

原创 switchhosts没有写入权限解决方法

switchhost提示没有写入权限,无法进行切换的解决方案

2022-12-29 16:02:58 8453 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除