Go教程技术文章
-
用一个可复用的 TextUnmarshaler 类型接入 Go flag.TextVar,讲清默认值、错误处理以及 TextVar、Var、Func 的选择边界。479 收藏 -
Go database/sql 的 Scanner 接收到的 []byte 可能由驱动暂时拥有,下一次 Scan 后就不再适合长期引用。本文区分 *[]byte、sql.RawBytes、interface{} 和自定义 Scanner 的复制边界。343 收藏 -
Go database/sql 读取多个 SQL 结果集时,要在每组内部用 Rows.Next 遍历行,当前组结束后用 NextResultSet 切换,并在每次切换后重新调用 Next;本文给出两层循环、空结果集和错误处理写法。456 收藏 -
使用 Go 的 xml.Decoder 流式读取 XML 时,先用 Token 找到目标 StartElement,再用 DecodeElement 把当前节点和嵌套内容解码到结构体,并正确处理 EOF、错误和循环边界。436 收藏 -
Go 的 json.Encoder 默认会把 <、>、& 写成 Unicode 转义。本文按 JSON 的实际消费边界比较默认策略与 SetEscapeHTML(false),说明 HTML 嵌入、API、配置文件和日志场景应该怎样取舍。114 收藏 -
Go json.Decoder 可能预读后续协议数据。本文说明如何复制 Buffered 内容,并用 io.MultiReader 按前缀优先的顺序安全交接给下一层。370 收藏 -
Go 用 url.JoinPath 拼接动态资源路径时,先区分单个路径段和多级路径,再用 PathEscape 处理动态值,避免斜杠、空格和路径清理行为带来编码错误。199 收藏 -
url.ParseQuery 返回错误时,Values 仍然包含已经成功解码的合法参数。本文用一个混合合法与非法编码的查询串,说明如何识别部分成功、如何在保留参数和拒绝请求之间做出明确选择。458 收藏 -
httptest.NewTLSServer 使用自签名测试证书,直接交给默认 http.Client 往往会出现 x509 unknown authority。本文说明怎样复用 ts.Client(),怎样在保留证书信任的前提下增加超时或 Transport 配置,以及完全自建 Transport 时如何补回测试证书。437 收藏 -
Go HTTP 请求遇到需要保留正文的重定向时,关键是区分 Body、GetBody 和 ContentLength。本文说明 NewRequest 对常见 reader 的处理,并给出自定义请求体的安全重放写法。334 收藏 -
用 Go http.MaxBytesReader 限制请求体,识别 *http.MaxBytesError,并在响应头提交前稳定返回 413,区分超限、EOF 和其他读取错误。163 收藏 -
Go 切片直接赋值只复制切片头,slices.Clone 才会创建独立底层数组。本文从共享视图、可变副本、旧版本 append 写法和 nil/浅复制边界出发,给出按读写责任选择的实用判断。186 收藏 -
Go container/list 的 MoveToFront 只会移动属于当前链表的 Element。传入另一个链表创建的节点时,当前链表不会修改;本文用最小示例拆解症状、官方契约和节点归属修复。177 收藏 -
Go 的 heap.Fix 用于恢复已入堆元素改值后的堆顺序,关键是让元素保存的 index 始终与 Swap、Push、Pop 同步。本文用任务优先队列示例说明 Fix 的调用方式、复杂度、与 Remove 加 Push 的区别,以及 Pop 后旧索引为什么不能继续使用。381 收藏 -
time.Timer.Reset 返回 false 不代表重置失败,它表示定时器在调用前已经到期或停止。本文按活动、到期、停止三种状态,说明 Go 1.23 及以上与旧版本的重新安排写法。446 收藏