Go问答技术文章
-
Golang · Go问答 | 1个月前 | 并发 · 性能优化 · sync.Pool · bytes.Buffer · Go问答 · reset bytes.Buffer 对象复用 Go sync.Pool 数据串行
sync.Pool 复用 bytes.Buffer 时,旧内容残留和过早归还都会让响应出现串数据。本文从现象、最小复现到 Reset 与归还时机,给出可直接用于编码响应的安全写法。294 收藏 -
Golang · Go问答 | 2个月前 | HTTP · sse · Go问答 · 用户体验 · 流式响应 · Go EventSource SSE Go问答 Server-Sent Events 长任务进度 http.Flusher
用 Go net/http 实现一个长任务进度 SSE 接口,讲清任务提交、事件格式、http.Flusher、浏览器 EventSource、心跳保活、断开取消和资源清理。293 收藏 -
支付渠道一多,业务代码很容易被供应商 SDK 和字段差异拖住。本文用 Go 拆出支付端口、渠道适配器和业务用例,演示如何保持核心接口稳定,并处理超时、重复回调和渠道错误映射。293 收藏 -
slices.Delete 会原地移动元素并返回新切片。排查对象迟迟不释放时,要同时看 Go 版本、尾部引用是否清零、返回值是否接住,以及底层数组容量是否仍被长期持有。293 收藏 -
Golang · Go问答 | 1个月前 | 错误处理 · go · SQL · database/sql · 线上排查 · SCAN 查询结果 database/sql Go问答 rows.Next Rows.Err
Go 读取数据库结果时,rows.Next 返回 false 只能说明当前结果集没有下一行,不能直接当成查询成功。需要在循环后检查 rows.Err,并分别处理 QueryContext、Scan、Close 的错误,才能区分正常查完、数据库中断和结果读取失败。292 收藏 -
Golang · Go问答 | 1个月前 | 并发 · map · RWMutex · sync.Map · Go问答 · 数据竞争 RWMutex sync.Map map并发读写 Go问答 concurrent map read and map write
Go 原生 map 不是并发安全容器,只要一个 goroutine 写 map,同时另一个 goroutine 读或写同一个 map,就可能触发 concurrent map read and map write。生产代码要按访问模式选择 RWMutex、单协程归口或 sync.Map。291 收藏 -
Go 的 time.Timer 不是改一个时间数字那么简单:Reset 前要先处理已经到达的旧事件,重置后还要保证只有一条超时路径能结束本次等待。本文用可复现的请求超时流程说明 Reset、Stop、通道读取和 context 的边界。291 收藏 -
Go regexp.FindStringSubmatch 返回 nil 只表示整体没有匹配;匹配成功但捕获组为空时,切片仍然存在。本文用最小示例区分 nil、空字符串和可选分组,并给出稳定判断写法。290 收藏 -
Golang · Go问答 | 3星期前 | HTTP · IO · 流式处理 · Go问答 · 性能边界 · TeeReader · io.TeeReader io.Reader 请求体 日志审计 Go问答 流式复制
Go 的 io.TeeReader 会把每次读取到的字节同步写入另一个 Writer,适合做摘要、哈希和审计,但不等于后台复制。本文用请求体落盘场景拆开同步写入、写入错误传播、部分读取和失败清理边界,给出可验证的安全用法。289 收藏 -
Go 里 context.WithTimeout 设置的超时可能比预期更早,因为子 Context 的截止时间不会晚于父 Context。本文用父子 deadline、ctx.Done 和 cancel 说明如何定位提前结束,并给出可复查的调用边界。289 收藏 -
Golang · Go问答 | 1个月前 | 依赖管理 · golang · 私有仓库 · 工程实践 · Go Modules · GOPROXY GOPRIVATE GONOPROXY GONOSUMDB Go私有模块 go mod download
Go 拉取私有模块时,报错往往不是凭据本身失效,而是模块路径先被公共代理或公共校验服务请求。先用 GOPRIVATE 标记私有路径,再按公司是否部署私有代理决定 GONOPROXY 与 GONOSUMDB 的边界,最后用 go env 和 go mod download 收敛问题。288 收藏 -
time.Duration 本质是纳秒数,直接转成整数时会按目标单位截断小数。本文从接口参数和调用方预期出发,拆解单位常量、整数除法、浮点换算与超时配置的边界,给出可核对的写法。288 收藏 -
Go 1.23 引入的 slices.Sorted 会收集迭代器值并返回新的有序切片。本文用同一段可运行代码核对排序结果、原切片是否被修改以及空输入行为。288 收藏 -
Go 用 strconv.AppendInt 把整数追加到 []byte 时,关键不是记住一个性能结论,而是看清切片长度、容量和底层数组何时变化。本文用可运行代码说明复用缓冲区的边界,并处理别名切片带来的覆盖问题。287 收藏 -
Golang · Go问答 | 4天前 | 超时 · go · 外部命令 · 进程管理 · CommandContext · wait 子进程 进程超时 Go外部命令 CommandContext 命令启动
CommandContext 超时并不等于所有子进程都已退出。本文用可运行示例拆解 Start、Process、Wait 与子进程继承关系,给出可核对的超时收尾写法。287 收藏