Go语言技术文章
-
Go 调试 HTTP 响应时,httputil.DumpResponse(resp, true) 会读取并重新包装响应体。本文用一个完整示例说明记录响应后如何继续读取 Body,并梳理 body 参数、错误路径、关闭时机和大响应体边界。175 收藏 -
Go build tags 与平台文件后缀在构建时选择源文件。本文通过互斥的 Linux、Windows 和通用实现,说明目标平台、包级排障命令、回退方式与跨平台交付边界。175 收藏 -
go test 显示 cached 却没有感知输入文件变化,通常是依赖没有进入测试缓存键。本文说明模块内文件、外部输入和环境变量的处理方法,并给出诊断与 CI 落地方案。174 收藏 -
多个 Go 实例首次启动时,如果只使用 O_CREATE 或先检查再创建,同一路径可能被重复打开并发生覆盖。本文用 O_CREATE|O_EXCL 把“谁能创建”变成一次性判断,并说明 os.ErrExist、写入失败清理和实现边界。174 收藏 -
Go tcell 绘制中文、全角符号或 emoji 时,不能按 rune 数量固定让列坐标加一。本文从覆盖现象出发,说明 Put 返回的显示宽度、右边界判断和宽字符占两格的绘制方式。174 收藏 -
用 Go Goldmark 的 ast.Walk 遍历 Markdown AST,提取 Heading 层级和纯文本,生成可用于目录、侧栏和锚点的结构。174 收藏 -
用 Action、Package、Test 和 FailedBuild 读懂 go test -json 的换行 JSON 流,区分测试事件、构建事件与包级结果。173 收藏 -
用 goquery.Map 把一组 HTML 节点按原顺序转换成强类型 Go 结构体切片,并说明 Attr 缺失、空文本、校验和批量解析时的边界处理。173 收藏 -
Go 服务启动时报端口被占用时,从 net.Listen 的绑定地址入手,结合 macOS、Linux、Windows 命令定位 PID 和监听范围,区分旧实例、IPv4/IPv6 与通配地址冲突,并给出安全停止、改端口和复查方法。172 收藏 -
sync.Once 适合只允许成功初始化一次的场景,但初始化函数一旦返回或 panic,后续 Do 不会重试。本文用显式状态机实现并发等待、失败退避、context 取消与成功缓存,并给出方案选择边界。172 收藏 -
Go 的 iter.Seq 没有 error 返回位,遍历过程中的错误应通过结果对象携带;初始化失败则直接作为外层 error 返回,pull 迭代器提前结束还要调用 stop。171 收藏 -
用 Go testing/iotest.TimeoutReader 在测试中稳定制造一次读取超时,区分 ErrTimeout、EOF 和其他错误,并验证调用方只对临时超时执行有限重试。171 收藏 -
Go 的 os/user.Current 用于获取当前进程用户,首次调用后会缓存结果;os/user.Lookup 用于按用户名查询,并在找不到用户时返回 UnknownUserError。本文结合 cgo、osusergo 和跨平台字段差异说明怎样选择。171 收藏 -
Go 自定义 MarshalJSON 时直接再次编码原类型会无限递归。本文说明 json.Marshaler 的触发原因,并用新的定义类型复用默认字段编码、追加自定义字段,同时保留错误处理边界。169 收藏 -
Go context 的 Done 只能通知退出,Err 只能说明取消类别。本文用 WithCancelCause 和 Cause 区分超时、主动取消与业务失败,并解释父子 Context 首次取消的传播边界。169 收藏