Go教程技术文章
-
Golang · Go教程 | 1星期前 | 基准测试 · testing · 性能 · Go教程 · GOMAXPROCS RunParallel Go testing.B.SetParallelism 并行基准 IO吞吐
围绕 Go testing.B.SetParallelism 说明 IO 型 RunParallel 基准为何需要调整并发倍数,给出 p×GOMAXPROCS 的换算、独立 worker 写法、档位对比和连接池边界判断。404 收藏 -
Go testing.T.Cleanup 会在测试及其子测试完成后执行已注册回调,并按后注册先执行的顺序收尾。本文用资源依赖和子测试作用域说明怎样安排注册顺序,避免测试夹具提前失效。309 收藏 -
Go 的 flag.FlagSet 通过 ContinueOnError 把参数解析失败交给调用方处理。本文比较三种 ErrorHandling 策略,并给出可复用、可测试的解析函数写法。273 收藏 -
Go flag.BoolFunc 适合无显式值但需要每次触发动作的命令行开关。本文说明重复解析、显式值、错误处理,以及它和 Bool、Func、自定义 Value 的选择边界。246 收藏 -
Golang · Go教程 | 1星期前 | 反射 · Go教程 · database/sql · Go database/sql Rows.Scan ColumnType ScanType 动态查询导出
Go 动态 SQL 导出不知道列结构时,可以先读取 Rows.ColumnTypes,再用 ColumnType.ScanType 返回的 Go 类型创建 Scan 指针;驱动不提供具体类型时回退到 any,扫描后复制字节切片并保留 NULL。381 收藏 -
用一个可复用的 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 收藏