Go语言技术文章
-
Go 的 internal 包不是按符号链接显示位置授权。模块模式下,go 命令主要按导入路径判断 internal 父树;本文讲清报错原因、定位方法与模块边界修复方案。294 收藏 -
用一个泛型集合示例说明 Go iter.Seq 的 yield 回调约定、range 提前停止、go.mod 语言版本和 single-use 迭代器边界。294 收藏 -
Go 使用 database/sql 查询多行数据时,Rows 既是遍历结果的对象,也是连接释放边界的一部分。本文用一套可复用的收尾写法覆盖正常读取、Scan 失败、提前返回、上下文取消和连接池排查。294 收藏 -
Go 的 map 与 maps.Keys 都不保证遍历顺序。本文给出 slices.Sorted(maps.Keys(m)) 的最小写法,说明默认升序、自定义比较器、稳定输出键值对、空 map、并发与性能边界。294 收藏 -
Go SSE 推送的关键不是循环 Write,而是用 ResponseController.Flush 提交事件,用 ticker 心跳维持空闲连接,并通过 Request.Context 感知客户端断开后停止生产。294 收藏 -
Go os.OpenFile 配合 O_CREATE 和 O_EXCL,可以把文件不存在检查与创建合并成一次独占操作。本文说明先检查再创建的竞态、已存在错误的判断、写入收尾和不同文件创建策略的选择。294 收藏 -
Go 1.20 起可以用 context.WithCancelCause 保存具体取消原因,再用 context.Cause 读取;本文区分 ctx.Err 的通用状态与 Cause 的诊断信息,并说明父子 context 的首次取消和超时原因设计。294 收藏 -
用 Go json.Decoder 连续读取多个 JSON 值,掌握 Decode 循环、io.EOF、数组边界和尾部缓冲的生产处理方式。294 收藏 -
Go 1.27 默认将 runtime/pprof goroutine labels 纳入部分 traceback 输出,可用 GODEBUG=tracebacklabels=0 为单个进程关闭标签,并区分环境变量、go.mod 与 //go:debug 的配置边界。294 收藏 -
Go 的 multipart.Writer 默认使用随机边界。本文围绕 SetBoundary 讲清合法边界、调用时机、Content-Type 同步和 Close 收尾,给出可直接改造的上传请求示例。294 收藏 -
Go mod why 可以从主模块到目标包或模块给出最短导入路径。本文说明测试代码为什么会带入依赖,以及 -m、-vendor、go mod graph 怎样配合定位来源和版本关系。294 收藏 -
Go 的 recover 只能处理当前 goroutine 正在展开的 panic,父 goroutine 的 defer 无法跨线程接住子 goroutine 的异常。本文拆解正确的入口包装、结果回传和失败处理方式。294 收藏 -
用 archive/tar.Reader 顺序读取 tar 包时,目录项不应被当成文件内容处理。本文从 Reader.Next 的自动丢弃规则出发,给出跳过目录、限制目标路径、区分 io.EOF 与 ErrInsecurePath 的可验证写法。293 收藏 -
slices.Delete 会原地移动元素并返回新切片。排查对象迟迟不释放时,要同时看 Go 版本、尾部引用是否清零、返回值是否接住,以及底层数组容量是否仍被长期持有。293 收藏 -
Go 1.27 调整 go tool trace 的 -http 监听默认值。本文对比 :6060、127.0.0.1:6060 与 0.0.0.0:6060,说明本机和远程调试如何保留清晰的访问边界。293 收藏