Go语言技术文章
-
用 Go embed.FS 嵌入模板时,直接把整个目录交给模板引擎容易扩大读取范围。本文从目录挂载、路径清理和上线验收三个环节,给出可复查的安全写法。161 收藏 -
Go 泛型接口同时写类型集和方法时,约束的是可接受的类型与可调用的方法。本文用一个可运行的小实验拆开两层边界,解释为什么某些类型能传入、为什么调用方仍然不能调用具体类型方法,并给出检查和扩展写法。201 收藏 -
Go 服务在数据库事务提交后发送消息、刷新缓存或调用外部接口时,最难处理的是提交成功与副作用失败之间的时间窗。本文用 Outbox 表、事务内写入、独立投递与幂等消费拆开重试边界,并给出可验证的 Go 实现与验收清单。238 收藏 -
Go 的 io/fs.WalkDir 适合做跨目录扫描,但权限错误、符号链接和大目录中断都不能靠默认行为猜测。本文用一个可运行的扫描器说明 fs.ValidPath、fs.SkipDir、context.Context 与错误记录如何配合。236 收藏 -
Go 的 context.WithCancelCause 能让调用方同时看到 context.Canceled 和真正的取消根因。本文用一个请求链示例拆解取消传播、Cause 读取、父子上下文竞速与错误包装边界。309 收藏 -
Go 接口升级时,既要识别未知字段避免拼写错误,又要保留新字段以兼容旧客户端。本文用 Decoder、DisallowUnknownFields 和 json.RawMessage 拆开这条边界。170 收藏 -
Go 泛型函数的约束既要表达可接受的类型,也要让调用方看得懂。本文从类型集、接口方法和类型推断三个边界出发,拆解约束设计、编译验证与常见误区。242 收藏 -
编辑器保存配置时常用临时文件写入再重命名,Go 文件监听器看到的可能是多次事件而不是一次保存。本文用事件合并、稳定快照读取和重试窗口处理原子替换,避免读到半个文件,也避免漏掉真正的更新。439 收藏 -
Go SSE 连接断开后,客户端应把服务端下发的 id 保存为恢复游标,重连时通过 Last-Event-ID 请求缺口;服务端按游标补发并让消费动作具备幂等性,才能同时避免漏事件和重复处理。194 收藏 -
Go 定时任务最容易被忽略的问题不是如何触发,而是上一次任务变慢后如何避免下一轮重入。本文比较 Ticker、单次触发和带状态的调度写法,并给出可验证的选型边界。434 收藏 -
Go defer 会在登记语句执行时先计算普通参数,而闭包里的变量可能等到真正执行时才读取。区分调用时快照和闭包捕获,就能解释循环日志、资源释放和错误记录中的常见偏差。255 收藏 -
Go 服务做配置热加载时,直接改共享结构体很容易让请求读到半成品。本文用 atomic.Value 发布不可变快照,拆解更新、读取、校验和旧配置回收的边界,并给出可验证的回滚做法。390 收藏 -
Golang · Go问答 | 4天前 | 标准库 · golang · unicode · 字符串处理 · strings.Split Go strings.Fields 字符串分词 Unicode 空白 Go 空字符串
Go 里处理用户输入时,strings.Fields 会按 Unicode 空白归并连续分隔符,而 strings.Split 会保留空字段。本文用可运行示例对比两者在连续空格、空字符串、中文空白和尾部分隔符上的结果,帮助你按数据边界选择 API。456 收藏 -
Golang · Go教程 | 4天前 | Go教程 · net/http · Go 1.22 · ServeMux · HTTP路由 · Go net/http 路由参数 ServeMux PathValue
用 Go 1.22 及以上版本的 net/http ServeMux 读取路径通配符,讲清 PathValue、通配符边界、路径转义和旧版本兼容处理。388 收藏 -
Go 程序明明调用了 Write,退出后日志文件却少了最后几行,常见原因不是字符串没生成,而是 bufio.Writer 仍留在用户态缓冲区,或 Flush、Close 的错误没有被检查。本文用一个退出前丢日志的场景,拆开缓冲写入、defer 执行时机、Flush 与 Sync 的边界,并给出可复测的收尾写法。496 收藏