Go语言技术文章
-
从 Go string 与 C char 指针的表示差异出发,说明 C.CString、C.GoString、C.GoStringN 的选择、C.free 的释放责任,以及异步保存指针时的生命周期边界。432 收藏 -
Go 1.20 的 errors.Join 可以把多条错误合并为一个错误值,同时保留 errors.Is 和 errors.As 的判断能力。本文用批量关闭资源、并行任务汇总等场景说明该怎么用,以及哪些时候不该把错误一股脑拼在一起。431 收藏 -
解释 Go http.Request.GetBody 的生成条件,区分可重读请求与流式请求,并给出重试、内存控制和上传场景的检查方法。431 收藏 -
Go embed.FS 把配置目录编译进程序后,可以用 fs.WalkDir 按路径筛选 YAML 文件并保留遍历错误。本文从嵌入文件树开始,演示目录遍历、扩展名过滤、错误返回和测试检查。431 收藏 -
strings.CutPrefix 一次只判断一个前缀。本文说明多个候选存在重叠时如何按最长优先,业务规则明确时如何保留显式顺序,以及空前缀和未命中的处理方式。431 收藏 -
Go JSON接口增加字段时,先保持旧字段的名字、类型和语义不变,再用可选字段、默认值和灰度读取承接新客户端。本文结合 encoding/json、严格未知字段校验和回滚清单,给出一套不破坏旧客户端的迁移方法。431 收藏 -
Go 结构体含 sync.Mutex 时,值接收者、参数传递、range 和 map 取值都可能复制锁。本文对比指针语义、快照边界与 go vet copylocks 的审查方法。431 收藏 -
Go context.WithCancelCause 能让取消信号继续保持 context.Canceled,同时把超时、依赖失败或主动终止等具体根因沿 context 链路传递给上层。本文用最小示例说明 Err、Cause、父子取消顺序和资源清理边界。431 收藏 -
Go fmt.Errorf 的 %w 能同时保留上下文和底层错误身份,但也会把底层错误纳入接口契约。本文说明包装位置、包边界转换和日志去重策略。431 收藏 -
Go sql.DB.BeginTx 会用传入的 context 管理整个事务生命周期。上下文取消后 database/sql 会回滚事务,Commit 返回错误。本文区分事务上下文、语句上下文与安全收尾写法。431 收藏 -
os.DirFS 只保证交给操作系统的路径带有指定前缀,根目录内的符号链接仍可能指向外部。本文用最小项目说明成因,并给出 Go 1.24+ 的 os.Root.FS 改写方案。431 收藏 -
Go HTTP Trailer 位于消息体之后,字段名必须在首部提交前声明,本文用服务端响应和客户端请求示例说明正确时序、分块传输条件与常见排查方法。431 收藏 -
Go 服务把审计日志同步写进一个文件后,吞吐上不去、磁盘抖动还会拖慢请求。本文用分片队列和批量落盘拆开写入压力,并验证顺序、重放与停机收尾。430 收藏 -
Go SSE 处理器已经 Write,浏览器仍可能迟迟收不到。本文用 ResponseController.Flush、SetWriteDeadline、代理缓冲检查和断连测试拆解完整刷新链路。430 收藏 -
http.ResponseController 把 HTTP 响应刷新和连接劫持能力统一到一组探测方法中。本文用真实 Handler 场景拆开 Flush、Hijack 与 ErrNotSupported 的调用边界,说明什么时候应当回退,以及如何验证响应状态。430 收藏