Go语言技术文章
-
Go 标准库没有统一的跨平台文件锁 API。本文比较 Unix flock 与 Windows LockFileEx 的竞争、清理语义,再给出原子占位、数据库和 Redis 等替代策略。354 收藏 -
Go exec.Cmd 同时读取 stdout 和 stderr 时,单路读取或提前 Wait 容易造成阻塞。本文解释 StdoutPipe、StderrPipe 与 Wait 的边界,并给出简单收集和并发分流两种处理方式。305 收藏 -
Go 服务收不到 SIGTERM 时,先核对目标 PID,再比较容器入口是否把信号留在 shell,最后用 NotifyContext 把信号接入服务生命周期。本文只围绕 PID、容器入口和 Go 接收代码给出排查与选择方案。409 收藏 -
Go 子进程的 Cmd.Env 为 nil 时默认继承父环境,显式切片会替换环境。本文比较继承与覆盖,说明 Dir、环境快照和输出管道的取舍,并提供自启动探针。237 收藏 -
Go 解析 YAML 配置时,普通值字段会把缺失、显式空值和合法零值揉成一个结果。本文用指针字段、默认值阶段与校验顺序拆开这三种状态,避免默认值覆盖用户明确传入的空值。156 收藏 -
同一个 JSON 字段承载多种对象时,先用公共字段确定类型,再用 json.RawMessage 延迟解析 payload。本文给出 Go 中按 kind 选择具体结构的写法,并区分缺少判别字段、未知类型与载荷格式错误。447 收藏 -
Golang · Go问答 | 3天前 | net/http · HTTP客户端 · Go问答 · Transport gzip Content-Encoding Go 自动解压 Response Body
Go 的默认 Transport 可能已经把 gzip 响应解压到 Response.Body,并删除 Content-Encoding。读取内容为空时,应先区分自动解压、显式请求 gzip 和 Body 被重复读取这三条路径,再选择直接读取或手动创建 gzip.Reader。365 收藏 -
Go 里把已经编码的参数再次交给 QueryEscape,常会出现 %25、%2B 等二次编码结果。本文用一个小型 URL 构造器区分查询参数、路径段和 URL 字段,给出稳定的排查与修复写法。360 收藏 -
Go regexp 的匹配实现采用 RE2 语义并保证随输入长度线性运行。遇到复杂模式耗时异常时,应先区分输入规模、重复编译和匹配次数,再用预编译与输入上限控制实际成本。218 收藏 -
解释 Go string 的字节长度、rune 字符边界和显示宽度差异,给出安全截断中文文本的实现与上线检查方法。403 收藏 -
并发测试里固定随机种子仍可能复现不了同一结果,常见原因是多个 goroutine 共享 Rand 或 Source,调用顺序被调度改变。本文按当前 math/rand 规则解释并发边界,给出局部随机源、种子派生和 rand.Seed 迁移方案。442 收藏 -
slog 包装 Handler 丢失 With 字段,常见原因是未保留派生状态。本文给出四方法委托实现与父子、分组、等级测试,并区分 Record 属性和 context.Value 的处理边界。213 收藏 -
Go runtime trace 里出现 goroutine 阻塞并不一定是锁竞争,也可能来自网络、系统调用或调度延迟。本文按事件与等待原因拆解分析路径,并说明何时切换到 pprof。236 收藏 -
Go pprof heap 报告定位不了内存泄漏,通常不是命令少,而是采集窗口、inuse 与 alloc 指标、采样率没有分开处理。本文给出一套可重复的采集和阅读顺序。338 收藏 -
gctrace 的 clock、cpu 与堆目标各有统计口径。本文区分 STW 和并发标记、goal 与 RSS,说明先构建后采集的写法,以及日志开销、采样周期和结构化指标的边界。408 收藏