Go 的 SSE 实时日志方案

在构建后台管理系统或运维平台时,“实时日志查看”是一个非常高频的需求。传统的做法往往是前端通过 setInterval 每隔几秒轮询一次接口,这种方式不仅时效性差,而且对服务器造成了大量无效请求。 ...

2025-12-17 · 3 分钟

Go errors.Is 失效问题的本质剖析

问题复现 最近在 Code Review 时发现了一个有趣的案例。代码逻辑清晰,测试也覆盖了主要分支,但在生产环境中 errors.Is 的行为与预期不符: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 type Error struct { ErrorCode int Message string } func (e Error) Error() string { return e.Message } var ErrTest = Error{ErrorCode: 100301, Message: "请求失败"} func getErr() error { return ErrTest } func main() { err := getErr() if errors.Is(err, ErrTest) { fmt.Println("ok") } else { fmt.Println("failed") // 实际输出 } } 预期输出 “ok”,实际却输出 “failed”。这个问题暴露了 Go 错误处理机制中一个常被忽视的细节。 ...

2024-11-01 · 3 分钟

GORM Hook 使用误区

背景 在 office-gateway 三期优化过程中,对任务数据实现了缓存机制,旨在提高查询性能。考虑到数据写操作频繁,且当前仅有一个接口负责读取,属于典型的写多读少场景。于是决定选用 GORM 的 Hook 机制来更新缓存。 ...

2024-11-01 · 3 分钟

GORM v1.25 错误处理机制的变化

传统的错误处理方式 在 GORM 的使用过程中,gorm.ErrNotFound 是最基础且使用最广泛的错误类型。作为开发者,我们习惯性地使用这种方式来处理查询未找到记录的情况: ...

2024-11-01 · 2 分钟

Go RPC 初探

RPC 技术分享 RPC 介绍 远程过程调用(Remote Procedure Call 缩写 RPC)是一个计算机通信协议,通俗来讲就是调用远程服务上的一个函数,在调用时将对象名、函数名、参数等传递给远程服务器,服务器将处理结果返回给客户端,客户端调用 server 端提供的接口就像是调用本地的函数一样。 RPC 的消息可以通过 TCP、UDP 或者 HTTP 等传输。 ...

2022-04-19 · 7 分钟

Go 之 Delve 调试

准备工作 安装 delve 项目代码 1 2 git clone git@git.baijiashilian.com:web/demo/go-debug-demo.git git clone git@git.baijiashilian.com:web/gotools/gitlab-tools.git 调试工具 delve delve 安装 https://github.com/go-delve/delve/tree/master/Documentation/installation 1 go install github.com/go-delve/delve/cmd/dlv@latest dlv 配置 1 ~/.dlv/config.yml 调试方式 本地调试 从源码开始编译并开始调试 1 dlv debug [package] [flags] 调试已经编译好的二进制文件 1 dlv exec ./hello -- args1 args2 编译的时候需要禁用编译器优化:go build -gcflags="-N -l" 编译选项有哪些:go tool compile -h 调试正在运行的进程 1 dlv attach pid [executable] [flags] 调试单元测试 1 dlv test [package] [flags] 远程调试 JSON-RPC & DAP 1 dlv --headless --listen 0.0.0.0:2345 <command> <target> <args> 兼容dlv connect、VS Code Go、GoLand ...

2022-03-20 · 4 分钟