Go语言技术文章
-
Go maps.Keys 返回无序键迭代器;文章用原创示例区分切片收集与排序,说明空 map、旧版本替代写法,以及结构体键完整比较规则,帮助得到排列可重复的键列表。320 收藏 -
Go strings.Lines 返回一次性 iter.Seq[string],适合按行惰性遍历字符串。本文说明换行符归属、空字符串、连续换行和没有末尾换行的尾行处理,并比较它与 SplitAfter 的使用边界。187 收藏 -
Go slices.Grow 用来在批量追加前保证切片还有 n 个元素的容量空间。本文区分长度、容量和追加预算,说明为什么必须接住返回值,以及空切片、容量足够、负数参数和过大申请时的处理边界。366 收藏 -
围绕 ResponseWriter 包装导致的 http.Flusher 断言失败,说明安全断言、Unwrap 透传和 ResponseController 兜底的兼容写法。103 收藏 -
Go build -ldflags 传入带空格的 -X 参数,需要同时保留 shell 实参和 Go 内层赋值字段。本文给出完整赋值加引号的最小写法、受控构建标签示例,以及变量路径、输入范围与发布日志的检查要点。273 收藏 -
Go 项目同时存在 vendor 和 module cache 时,构建到底读取哪份依赖?本文用 go env、go list 和 -mod 参数定位选择模式,解释 GOFLAGS、go.mod 版本与 vendor/modules.txt 的关系。275 收藏 -
Go 项目在本地用 replace 指向兄弟目录时,开发机可能因为目录和 go.work 存在而编译通过,CI 却在依赖解析阶段失败。本文解释相对路径、require、go.work 与 GOWORK=off 的边界,并给出从本地联调迁移到正式模块版本的做法。445 收藏 -
Go database/sql Tx 提交后查询不一致时,分开记录事务内读取、Commit回执与事务外新查询,核对查询入口、错误阶段、数据源和主键条件,避免误判提交失败或盲目重试。450 收藏 -
无缓冲 channel 的发送不是把值先放到队列里,而是要等接收方就绪。本文从最小复现出发,按接收未启动、接收提前退出和 nil channel 三条路径定位发送卡住,并给出带取消边界的接口写法。272 收藏 -
io.Pipe 写入阻塞常与同步背压、消费者提前退出及关闭责任有关。本文给出一读一写的完整示例,说明消费失败如何关闭读端通知写端,并比较 Pipe、内存缓冲和有界队列的适用边界。468 收藏 -
Go exec.Command 找不到程序时,先区分父进程 PATH、命令解析和子进程 Env。本文用 LookPath、Cmd.Path 与 os.Environ 逐层排查,并说明什么时候必须改成绝对路径。487 收藏 -
Go text/template 中变量输出为空,常见原因不是模板语法,而是 range、with 改变了点号上下文,或子模板没有显式收到数据。本文用最小示例拆开 dot、$、变量和字段访问的作用域边界,并给出可复用的排查清单。458 收藏 -
Go pprof heap profile 中样本条目偏少,并不等于程序只分配了这么少的对象。本文区分采样条目、加权读数、inuse 与 alloc 指标,并说明 MemProfileRate 应该怎样影响解读。172 收藏 -
Go fuzz 运行时间过长时,不要只盯着 -timeout。本文区分 -fuzztime、-fuzzminimizetime、-parallel、-timeout 和 Fuzz 目标内的输入大小限制,并给出本地、CI 与深度 fuzz 的组合方式。234 收藏 -
Go 的 nil map 可以读取、遍历和删除,但不能写入。本文用缓存索引示例说明 make 初始化、惰性初始化、双值读取和回归检查,避免 assignment to entry in nil map。103 收藏