- 博客(51)
- 收藏
- 关注
原创 bug复盘:MCP SSE Client 生命周期问题之context.Background() 的使用
文章摘要: 开发过程中发现MCP平台SSE客户端连接意外中断问题,经排查发现是错误地将请求上下文传入Start方法导致。问题表现为每次请求结束后SSE连接被关闭,无法复用客户端。根本原因在于使用了具有超时/取消机制的请求上下文,而非独立上下文。解决方案是改用context.Background()作为根上下文,使SSE连接脱离单个请求的生命周期,实现持久化连接。该案例揭示了Go语言中context.Context的正确使用场景。
2025-06-26 21:58:28
449
原创 图的拓扑排序管理 Go 服务启动时的组件初始化顺序
文章摘要:本文介绍了如何利用拓扑排序解决Go应用程序组件初始化时的复杂依赖问题。通过构建依赖图并使用Kahn算法进行拓扑排序,实现了自动化的组件初始化顺序管理。该方法避免了手动维护初始化顺序的繁琐,能够检测循环依赖,同时具有良好的可扩展性和错误隔离性。文章详细展示了initial包的设计,包括依赖关系定义、初始化器注册和拓扑排序实现,为复杂Go应用的启动过程提供了优雅的解决方案。
2025-06-24 20:46:26
190
原创 人间失格-大学四年的回首
坐在西湖区某挂壁出租屋的落地窗前,看着凌晨一点寂静的街道和熄了灯的写字楼,我突然想起了两年半前大二上学期在学校某个群上看到的学习python的类似社团组织的广告,那时我就在想这对我人生轨迹的影响。当时认为如果能进大厂,会是人生这一小阶段的完美终点,其实那是焦虑循环的起点。bg双非非科班,buff叠满了。大一的时候我就考虑了未来要过怎样的生活,最开始还没有转码的打算,在自己探寻可以走的道路。
2025-06-12 22:35:39
527
原创 通过GO后端项目实践理解DDD架构
这里借用github老哥的一张图来说明,那些长篇大论就不叙述了,因为咱们主要是在代码中应用嘛,直接讲解在项目中要怎么写。DDD主要分为几层,在DDD中的调用顺序是 interface -> application -> domain可以类比MVC controller -> service -> model可以发现DDD比MVC多了一个infrastructure层,这里用某张表的CURD来举例,这里的某张表在domain层中被称为某个仓储(Repository。
2025-04-16 18:05:43
1021
原创 Go语言反射机制在数据库同步中的实战应用 —— 动态赋值与类型转换详解
看下我是怎么用的,这里因为涉及到项目代码,所以我脱敏了,以下调用是当我监听到event(binlog事件)的时候,调用这个方法去把binlog日志中的字段转成GO结构体的字段,入参是表的字段名切片和行数据,返回值就是转换好的GO结构体。看下这个方法的具体实现,Binlog 行数据转换为结构体,先得到binlog一条记录的一个字段,然后查GO结构体有没有字段和它是对应的,如果有就赋值。笔者目前在实习,有一个需求是这样的,需要监听mysql的biinlog日志,根据日志实时同步操作,这里涉及到一个问题,
2025-03-22 00:34:54
490
原创 6.5840 Lab 3: Raft
在ticker()中,题目提到"不要使用Go的 time.Timer 或 time.Ticker ,它们很难正确使用",所以用原本代码框架中的time.Sleep()来实现定时操作,sleep的时间也是leader心跳的间隔时间,对于节点选举超时的定时器,用time.Since(rf.electionStart) >= rf.electionTimeout实现。对不同的role的节点,执行不同操作,leader是心跳,其他则是开始选举,这里使用一把大锁保平安。实现 Raft 的领导者选举和心跳机制(
2025-03-22 00:03:57
898
原创 6.5840 Lab 2: Key/Value Server
在这个实验中,你将构建一个单机版的键值服务器,该服务器能够确保每个操作在网络故障的情况下依然能被,并且这些操作是。在后续实验中,你将实现类似的服务器以支持服务器崩溃的情况下进行复制。和Get(key)。argGet(key)Append每个客户端通过一个Clerk与服务器交互,Clerk提供了PutAppendGet方法以管理与服务器的 RPC 通信。你的服务器必须确保,客户端对Clerk方法(如GetPutAppend)的调用是。线性化非常方便,因为它模拟了一个按顺序处理请求的单服务器行为。
2024-11-18 11:43:16
947
原创 MIT6.5840 Lab 1: MapReduce(6.824)
介绍在本实验中,您将构建一个MapReduce系统。您将实现一个调用应用程序Map和Reduce函数并处理文件读写的工作进程,以及一个将任务分发给工作进程并处理失败的工作进程的协调进程。您将构建类似于MapReduce论文的东西。(注意:本实验使用“coordinator”代替论文中的“master”。
2024-11-17 22:04:20
1112
原创 详解Go语言中的Goroutine组(Group)在项目中的使用
Go语言通过其内置的goroutine和通道(channel)机制,提供了强大的并发支持。goroutine的开销非常低,一个goroutine仅占用几KB的内存,可以轻松创建成千上万个goroutine来处理并发任务。然而,随着并发任务数量的增加,管理goroutine的生命周期、处理错误以及保证资源正确回收变得越来越复杂。例如,我们需要处理以下场景:为了解决这些问题,引入了一个结构体,提供了一种更高级的方式来管理一组goroutine。创建函数 函数用于创建一个新的goroutine组实例
2024-07-10 22:09:29
1257
1
原创 gin接收图片文件,websocet持续返回响应,解决多任务排队问题
有一个需求是这样的,前端需要通过http请求的form-data上传图片文件,后端接收图片后调用AI接口执行命令,由于命令执行时间较长,需要持续返回当前任务在全局任务列表中的位置,以便前端即时更新排队信息。
2024-05-31 23:33:04
616
原创 Go 多模块工作区处理一个go项目下有多个module(即多个go.mod)的情况
在现在微服务盛行的年代,一个人会维护多个代码仓库,很多的时候是多个仓库进行同时开发,也就是在当前项目下有多个目录,每个目录对应一个微服务,每个微服务都有一个go.mod文件。那么我在其中一个目录下要怎么导入其他目录中的库呢?这是没使用go work的场景,无法识别自定义包(这些包下都各自有各自的go.mod)
2024-05-10 15:41:50
754
原创 MIT6.1810/Fall 2022(which was called 6.S081 then) Lab5-7
COW,多线程,E1000驱动
2024-01-30 16:14:38
1121
原创 Stanford CS106B 2022 Assignment 9. Huffman Coding 解析
CS106B最后一次作业,实现一个霍夫曼树对文件的压缩解压缩操作
2023-10-16 15:38:20
191
原创 Stanford CS106B 2022 Assignment 7. The Great Stanford Hash-Off解析
这部分介绍了如何用c++实现线性勘测表和罗宾汉哈希表
2023-10-14 00:28:03
128
原创 尝试找到一组班次,使员工在不超过最大小时数限制的情况下获得最大的价值,CS106B ASSIGNMENTS3 Shift Scheduling
使用递归来探索所有可能的班次组合,并在每一步中考虑两种选择:选择当前班次或不选择当前班次。它会根据最大小时数限制和班次之间的重叠情况来做出选择。最终,它返回产生最大价值的班次组合。
2023-10-05 19:17:03
114
原创 一句话里面有n个英语单词,每个单词有可能小写也可能大写,给出所有情况组成的集合,选自CS106B 2022Winter Assignment 3 Recursion Part Three
用递归和回溯的思想解决类似于枚举所有子集的问题
2023-09-29 23:58:02
195
原创 使用多线程,批量处理接口优化业务,模拟电商系统中用户下单场景
性能调优本质:解决用户体验与资源的矛盾。进行性能调优的业务场景:用户下单->web服务(控制层) ->web服务(服务层) -(依次去各微服务去调用后端服务器的接) ->得到接口的结果后返回给用户
2023-09-20 00:04:35
770
原创 什么是Docker以及如何使用Docker部署Go Web应用和Docker Compose模式
通过docker compose把微服务项目部署在多个容器中,并且可以相互通信,本文还介绍了docker的知识
2023-09-05 20:16:07
338
原创 GO微服务中使用RocketMQ消息队列系统实现分布式事务
RocketMQ消息队列系统用于实现电商购物demo中创建订单服务中分布式事务,关于分布式事务和消息队列也有介绍
2023-09-02 15:46:44
1141
原创 GO微服务中分别用乐观锁,悲观锁,redis分布式锁解决购物平台并发扣库存问题
在购物平台中,扣库存是一个非常关键的操作,涉及到多个并发的操作,比如多个用户同时购买同一商品,或者同时购买多个商品等。在这种情况下,如果不加锁,可能会导致数据不一致、库存错误等问题。
2023-08-31 11:39:30
678
原创 使用grpc-gateway来完成把http请求转换为rpc请求
当我们使用微服务架构完成了项目后,可以使用grpc-gateway来完成把http请求转换为rpc请求
2023-08-30 02:02:57
605
1
原创 GO微服务开发中consul注册中心使用详解
很多初学者在刚刚接触微服务时对服务注册中心了解较少,本文详细介绍什么是consul以及consul怎么用
2023-08-28 14:36:53
688
8
原创 DJANGO后端开发简单员工管理系统实现登录功能中的JWT验证(零基础也可以看懂)
基于DJANGO的登录功能中的JWT原理,步骤,实现方法
2023-05-08 21:29:03
1156
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人