Go语言技术文章
-
Go encoding/base64 的 NewEncoder 会把不足一个完整分组的尾部数据暂存在内部,必须调用 Close 才能刷新到目标 Writer。本文用最小代码说明正确关闭顺序、StdEncoding 与 RawStdEncoding 的 padding 边界,以及 io.Copy、文件资源和错误处理的组合方式。114 收藏 -
Go token.FileSet 把每个源码文件映射到一个包含 EOF 的位置区间。本文解释 AddFile 的 base、size 与 FileSet.Base 关系,说明手工复用 base、混用本地 offset 时为什么会出现 panic 或位置错位,并给出多文件位置分配与排查写法。114 收藏 -
Go 的 json.Encoder 默认会把 <、>、& 写成 Unicode 转义。本文按 JSON 的实际消费边界比较默认策略与 SetEscapeHTML(false),说明 HTML 嵌入、API、配置文件和日志场景应该怎样取舍。114 收藏 -
Go 定时任务并不只是每隔几分钟调用一次函数。本文比较 time.Ticker 与 cron 调度器在固定间隔、整点触发、错过补偿、任务重叠和停机收尾上的差异,并给出按业务约束选型的最小实现。113 收藏 -
Golang · Go教程 | 1个月前 | 日志 · 标准库 · time · go · Go时间格式化 encoding.TextAppender Go time.Time.AppendText RFC3339Nano
Go 1.24 为 time.Time 增加 AppendText,可把 RFC 3339 纳秒时间直接追加到已有字节切片。本文对比 Format 与 MarshalText,说明错误返回、时区偏移和日志字段复用的边界。113 收藏 -
Go 的一次性值闭包适合把昂贵初始化延迟到第一次真正使用时,并保证并发调用只执行一次。本文用标准库代码说明闭包状态、panic 记忆和失败返回值的边界。113 收藏 -
用 go test 生成 Go 测试覆盖率文件,再用 go tool cover 按函数和语句定位未覆盖代码,并说明多包与集成测试的 covdata 边界。113 收藏 -
Go 接口装入 typed nil 后为什么不等于 nil?本文用静态类型、动态类型和动态值拆开接口语义,解释 error 返回中的常见陷阱,并给出类型断言、反射与 API 边界的处理清单。113 收藏 -
Go 的 flag.String 适合单值参数;需要重复传入 -tag api -tag worker 时,可以定义实现 flag.Value 的字符串切片类型,在 Set 中 append 并通过 flag.Var 注册。本文说明重复参数、默认值、空值、错误和位置参数 Args 的边界。113 收藏 -
Go 项目开启 vendor 后,不能只看目录是否存在。本文用 go env、go list -f 和 vendor/modules.txt 确认实际依赖目录,并解释构建命令与 go mod 命令的取源边界。113 收藏 -
Go os/exec 同时读取 StdoutPipe 和 StderrPipe 时,串行消费可能因管道缓冲写满而阻塞。本文给出 Start、双路读取、Wait 的修复顺序,并说明何时使用 CombinedOutput。113 收藏 -
embed.FS.Open 接收的是 io/fs 规则下的逻辑相对路径,直接传入带 ..、绝对路径或反斜杠路径会失败。本文按故障时间线解释根因,并给出可复用的清理与边界处理方式。113 收藏 -
围绕 Go net/url 的 Userinfo 展开,说明如何用 User 与 UserPassword 构造包含 @、冒号、斜杠、空格和中文的用户信息,并用 String 生成完整 URL、Parse 后取回字段,同时区分路径和查询参数的转义边界。113 收藏 -
Golang · Go问答 | 2个月前 | golang · 超时 · HTTP · Go问答 · 网络排查 · 连接超时 http.Transport Client.Timeout Go HTTP 客户端超时 TLS握手超时
Go 的 http.Client 超时太粗时,DNS、建立连接、TLS 握手和响应读取会混在同一个等待里。本文用一段可复现的慢请求场景拆开 Transport 参数,给出基线指标、改动方案和复测边界。112 收藏 -
Go 里用 slices.Delete 删除元素后,切片长度变小不代表底层数组立刻释放。要结合 Go 版本、元素类型、尾部引用是否清零和切片是否继续持有容量来判断 GC 边界。本文从批量过滤场景拆开删除、复用与内存回收的关系。112 收藏