Go语言技术文章
-
Go 的 bytes.Cut 适合按首个分隔符拆出 before、after 和 found 三个结果。本文从空片段、缺少分隔符和请求头解析中的误判出发,说明如何用 found 区分合法空值与格式错误。466 收藏 -
reflect.VisibleFields 可以按 Go 的字段可见性规则枚举结构体字段,连同嵌入字段也能得到稳定的 Index 路径。本文用一个审计结构体示例说明如何读取字段、区分匿名字段和未导出字段,并处理重名与空结果边界。391 收藏 -
Go 的 unicode/utf8.RuneStart 只能判断字节是否可能位于一个 UTF-8 字符的起点,不能单独完成合法性校验。本文用切片扫描、DecodeRune 和 Valid 的组合处理截断与非法序列。368 收藏 -
Go 的 base64 解码遇到截断或非法字符时,会返回部分结果和 CorruptInputError。本文用 DecodeString、Decode 和 RawStdEncoding 对比补位、换行与错误位置的判断方式。404 收藏 -
用 Go archive/zip 把本地文件复制成 ZIP 条目,拆解 FileInfoHeader、CreateHeader、io.Copy 与 Writer.Close 的执行顺序,并说明 CRC 校验和关闭阶段错误为什么不能忽略。188 收藏 -
Go io.Pipe 的写入端提前关闭时,读取端可能看到 io.EOF 或具体错误。本文用最小示例梳理 Close、CloseWithError、Read 返回值和排查顺序。428 收藏 -
用一个可运行的 net/http 示例说明 HandlerFunc 如何把普通函数接入 ServeMux,再用中间件包装请求日志与响应头,厘清组合顺序、闭包捕获和错误边界。387 收藏 -
io.ReaderAt 的 ReadAt 可能同时返回已读字节和 io.EOF。本文用可运行示例拆开 n、len(p) 与 err 的判断顺序,说明文件尾、部分读取和完整读取时的安全处理方式。263 收藏 -
用 Go io/fs.Sub 把一个目录裁成受限文件树,配合 fs.ValidPath 和 fs.Open 处理路径边界、目录遍历与失败回退。284 收藏 -
用 runtime/trace.NewTask 给跨 goroutine 的业务操作建立可追踪边界,说明 context.Context 如何传播任务、task.End 如何收口,以及 trace.WithRegion 与 go tool trace 的分工。307 收藏 -
bytes.Buffer Reset 只把当前长度归零,不会自动擦除底层数组。本文用 Bytes、Reset 和 Write 的实际关系解释旧切片为何还能读到内容,并给出安全复用与释放引用的判断方法。144 收藏 -
Go 的 expvar 包能把计数器、状态值和自定义变量以 JSON 暴露在 /debug/vars。本文从一个请求计数器出发,讲清 Publish 注册、原子更新、并发遍历和生产环境隔离边界。302 收藏 -
http.Header.Get 找不到请求头和请求头值为空时都会返回空字符串。本文用 http.Header、Header.Get 与逗号 ok 判断拆开这两个状态,并给出适合接口校验的写法。482 收藏 -
用一个可运行的 Go HTTP 示例说明 http.Server.ConnContext 适合绑定连接级租户标识的边界,以及如何在请求处理中安全读取、验证和测试它。425 收藏 -
用一个可运行的 Go HTTP 示例,把租户配置从全局变量迁移到请求级依赖容器,说明 Handler、TenantConfig 和 context.Context 的边界、取舍与验证方式。209 收藏