Go教程技术文章
-
Go 结构体切片按多个字段排序时,先比较主字段,只有主字段相等才比较次字段。本文用 slices.SortFunc 给出姓名升序、年龄升序及混合升降序写法,并说明原地排序、不稳定排序和旧版 Go 的兼容处理。280 收藏 -
Go httptest.NewRecorder 的 Code 并不是创建时就固定为 200。本文区分显式 WriteHeader、写正文触发的隐式 200 和完全不写响应的 0,并说明为什么应使用 Result().StatusCode 断言最终 HTTP 状态。280 收藏 -
Go 标准库 archive/zip 可以通过 Reader.File 遍历压缩包条目,使用 Name 读取文件名,使用 UncompressedSize64 和 CompressedSize64 获取 ZIP64 兼容的大小信息。本文补全目录项、路径安全、资源关闭和生产检查边界。280 收藏 -
io.MultiWriter 会按传入顺序逐个写入,某个 Writer 返回错误或短写入后立即停止,不会继续后面的目标。本文用日志分流场景拆解部分写入、ErrShortWrite、重试与一致性边界。279 收藏 -
Go 中 bytes.Buffer 适合逐步写入并把内容交给下游读取,bytes.Reader 适合只读字节切片、定位游标和重复读取。本文用一个小实验拆开两者的状态变化与选择边界。279 收藏 -
Go 1.27 简化了函数文字符号名,并可能合并内联后的同一函数文字。升级后不要再用符号名或函数代码指针判断闭包身份,改用稳定的行为断言和显式测试标识。279 收藏 -
Go 中使用 net/url.ResolveReference 拼接 API 地址时,基础 URL 的尾部斜杠会决定相对路径进入目录还是替换最后一段。本文用代码和边界表说明相对路径、根路径、查询引用与完整 URL 的区别。279 收藏 -
用 Go encoding/xml 的结构体标签把重复 XML 子节点映射到切片,并处理嵌套路径、缺失节点与重复解码残留。279 收藏 -
Go sync.Pool适合复用可丢弃的临时对象,不适合保存配置、连接、租户或权限等长期状态。本文从可丢弃性、Reset清理、所有权和并发边界四个方面给出判断与实现方法。279 收藏 -
用 testing/fstest 的 MapFS 在内存中准备文件内容,测试 Go 文件读取、目录边界和缺失文件分支;再用 TestFS 检查自定义 fs.FS 的基本行为。278 收藏 -
Go 的 encoding/xml.Marshal 会按 XMLName、xml.Name、字段标签和类型名决定元素名称。本文用一个订单报文示例说明如何固定根节点、表达命名空间、把字段输出成属性,并用嵌套路径组织子元素。278 收藏 -
Go 多账号 HTTP 调用要把每个登录身份绑定到独立的 cookiejar.Jar 和 http.Client。本文说明如何复用同一会话、共享 Transport、重置 CookieJar,并用安全的 Cookie 名称检查排查登录态串号。278 收藏 -
Go 的 unique.Handle 适合把重复的可比较值映射为轻量句柄,用句柄比较代替长字符串比较,同时保留 Value 取回原值的能力。本文从标签去重场景出发,拆开 Make、Value、句柄相等和垃圾回收边界,并给出可运行的验证代码。277 收藏 -
在高频日志、协议拼包或批量导出中,fmt.Sprintf 的完整格式化很方便,但单个整数转文本时可能带来不必要的工作。本文用 strconv.AppendInt 与 fmt.Sprintf 的同一输出基准,拆开分配、缓冲区复用和可读性边界,给出可验证的选型规则。277 收藏 -
用一个可复用的 Go HTTP 客户端设置 MaxConnsPerHost,区分总连接上限与空闲连接上限,并掌握按 host:port 判断和验收配置的方法。277 收藏