Go语言技术文章
-
Go 的 omitempty 只能按编码规则省略部分空值。把它与指针字段组合,可以清楚区分字段缺省、显式 null、空字符串和数字零值,适合 PATCH 请求与可选响应字段设计。136 收藏 -
围绕 Go net TCP 监听地址,说明通配地址、具体网卡 IP、tcp4/tcp6 与双栈边界,并给出启动异常的排查清单。134 收藏 -
Go compress/gzip 写入后不调用 Close,可能导致缓冲数据和 GZIP footer 没有完整写出。本文用最小示例说明 Write、Close、底层资源关闭和读取到 EOF 的排查顺序。132 收藏 -
Go sync.WaitGroup 的关键不是把 goroutine 等住,而是让 Add、Done 与 Wait 围绕同一批任务形成稳定配对,本文给出可直接复用的写法与排查边界。123 收藏 -
Go unsafe 指针转换的关键不只是地址能否转,而是对象在底层调用结束前是否仍然可达。本文用直接传参、runtime.KeepAlive 和 unsafe.Add 说明安全边界。123 收藏 -
Go 中直接调用 io.ReadAll 会把 Reader 读到 EOF。面对没有可靠长度的 HTTP 响应,应先做 Content-Length 预检查,再用 LimitReader 多读一个字节识别超限,最后把关闭、错误和解析边界统一处理。118 收藏 -
说明 Go net.Resolver 如何通过 LookupIP 的 ip4/ip6 和 DialContext 的 tcp4/tcp6 表达地址族偏好,区分 PreferGo、StrictErrors 与真正的 IPv4/IPv6 选择边界。116 收藏 -
用 Go testing/fstest.MapFS 在内存中构造文件树,让依赖 fs.FS 的读取逻辑脱离临时目录,并覆盖内容、目录和缺失文件测试。116 收藏 -
Go 文件跨盘迁移不要直接依赖 os.Rename;应在目标目录创建临时文件,复制并重新计算 SHA-256 校验,确认一致后再 Rename 替换目标,成功后按需删除源文件。115 收藏 -
Go os/exec 同时读取 StdoutPipe 和 StderrPipe 时,串行消费可能因管道缓冲写满而阻塞。本文给出 Start、双路读取、Wait 的修复顺序,并说明何时使用 CombinedOutput。113 收藏 -
讲清 Go gzip.Writer 写入 HTTP 响应时 Write、Flush、ResponseController.Flush 与 Close 的职责边界,给出按消息边界刷新、处理错误和排查代理缓冲的实现方案。108 收藏 -
说明 Go net 连接 IPv6 链路本地地址时的 zone、方括号、tcp6、JoinHostPort 和 DialContext 参数边界。106 收藏 -
用 Go os.CreateTemp 创建临时文件时,创建、写入、关闭和删除是四个不同责任。本文给出一套保留原始错误、无论成功失败都清理文件的实践写法。103 收藏