Go语言技术文章
-
Go reflect 中 CanAddr 与 CanSet 不是一回事。本文用 ValueOf、Elem、结构体字段、切片元素和 map 索引拆解 Set panic,并给出可复查的安全写入方法。136 收藏 -
Go 的 omitempty 只能按编码规则省略部分空值。把它与指针字段组合,可以清楚区分字段缺省、显式 null、空字符串和数字零值,适合 PATCH 请求与可选响应字段设计。136 收藏 -
Golang · Go问答 | 3星期前 | 标准库 · 并发安全 · HTTP · 源码分析 · Go问答 · Go 闭包 连接池 net/http http.Transport.Clone TLS配置
http.Transport.Clone 会创建新的 Transport,并让连接池、锁和连接计数保持独立;但回调函数、接口值及 tls.Config 浅拷贝内部引用的对象仍可能共享,需要按隔离目标主动替换。136 收藏 -
Scanner.Bytes 返回的是当前 token 的字节切片视图,不保证在下一次 Scan 后继续有效。本文用一个小工具复现变化原因,并比较即时处理、bytes.Clone、append 复制与 Text 的适用边界。136 收藏 -
pkg.go.dev v1 API 默认不返回完整文档与许可证列表。本文用 Go 构建批量汇总工具,说明 doc、licenses、module、version 参数,归并可再分发许可与文档状态,并处理路径歧义、429 限流和人工复核边界。136 收藏 -
Go 的 gzip 压缩级别是在 CPU 消耗、响应体大小和端到端延迟之间做取舍。本文用 NewWriterLevel 比较级别,并给出 HTTP Handler 中的配置、Close、Flush 与 Writer 复用注意事项。136 收藏 -
Golang · Go教程 | 3星期前 | 缓存 · HTTP · go · Go net/http 静态文件 Cache-Control ETag If-Modified-Since ServeFile
用 net/http ServeFile 提供静态文件时,Last-Modified 和 If-Modified-Since 可以由文件修改时间驱动条件响应;ETag 与 Cache-Control 则需要业务方明确设置。本文从一个文件处理器拆开这些响应头的职责边界,并说明路径拼接、304 和缓存失效的常见陷阱。136 收藏 -
Go 用 fmt.Errorf 增加错误上下文时,应使用 %w 保留底层错误链,再交给 errors.Is 或 errors.As 判断;本文从常见误区出发,说明 %v 与 %w、单层和多层包装、nil 边界以及服务层返回约定。136 收藏 -
Golang · Go教程 | 2星期前 | 日志 · HTTP · go · Context · slog · 可观测性 · Go context.Context 结构化日志 请求日志 log/slog slog.Logger
Go 的 log/slog 不会把 context.Context 中的值自动变成日志字段。更稳妥的做法是在 HTTP 入口用 Logger.With 固定 request_id、method、path 等请求属性,再把 context.Context 和这个 Logger 显式传给下游,并在需要时使用 InfoContext 或 LogAttrs。136 收藏 -
Go 的 interface 类型可以比较,但其中保存的动态值不一定可比较。本文从 panic 现场解释 slice、map、func 等类型为何触发运行时错误,并给出 reflect.Value.Comparable、类型断言和业务键比较的安全方案。136 收藏 -
Go strings.FieldsFunc 通过 rune 判定函数按自定义规则切分文本,连续分隔符会合并,首尾分隔符会被丢弃,结果字段始终非空。本文用原创示例说明多种分隔符、Unicode 空白以及它和 strings.Split 的边界差异。136 收藏 -
Golang · Go教程 | 1星期前 | 标准库 · 错误处理 · go · 数据导入 · csv Go Reader encoding/csv FieldsPerRecord ErrFieldCount
Go encoding/csv 默认会按首条记录推断字段数,字段数量变化时返回 ErrFieldCount。本文说明 FieldsPerRecord 的三种语义、可变字段 CSV 的正确配置,以及如何保留单条读取中的记录和错误。136 收藏 -
Go LDAP 中 EscapeFilter 面向 RFC4515 过滤器值,EscapeDN 面向 RFC4514 的 DN 属性值。本文用一个小查询项目说明两者的字符边界、组装方式与排错规则。136 收藏 -
使用 go-pretty/v6/table 把同一组表头和数据行导出为 Markdown,说明 AppendRows、页脚、RenderMarkdown、PadContent 以及列数和特殊字符边界。136 收藏 -
Go archive/tar 的 Header.Format 是 Reader.Next 对归档格式的尽力判断,可能返回 USTAR、PAX、GNU 或 Unknown。本文说明如何读取格式、比较能力边界,并在重新写入时显式选择兼容格式。136 收藏