Go语言技术文章
-
用 Go 泛型写切片函数时,S ~[]E 可以兼容原始切片、类型别名和底层类型相同的自定义切片。本文用一个保留返回类型的示例讲清约束、推导和边界。384 收藏 -
Scanner.Buffer 并不是把 token 变成无限大。Go 扫描长行时还要考虑 max、初始 cap、换行符空间、Buffer 调用时机和自定义 Split,本文给出排查顺序与 Reader 替代方案。383 收藏 -
Go io.Pipe 适合把边生成的数据直接接到 HTTP 上传请求。本文用 multipart 示例说明读写两端、Close 与 CloseWithError、请求取消和 goroutine 收尾,并列出 Content-Length、重试与可重复读取的边界。378 收藏 -
本文用 database/sql 的查询函数示例说明 rowslife 的工程化含义:如何限定 Rows 的所有权、关闭时机、Next/Scan/Err 判断和 Context 取消边界,避免半消费结果集泄漏到业务层。378 收藏 -
Go time.After 适合做一次等待的超时分支,但固定时长不能自动代表整轮任务的截止时间。本文用绝对 deadline 和 time.Until 计算剩余预算,说明如何在 select 中同时处理结果、取消与超时。377 收藏 -
Go sync.Cond Broadcast 唤醒所有等待者,但不保证条件仍然成立。本文用任务队列说明如何用同一把锁保护状态、用 for 循环检查条件,并排查看似丢失唤醒的问题。377 收藏 -
Go 的 archive/tar 通过同一个 Writer 顺序写入多个条目。本文说明 Header.Size、WriteHeader、Write 和 Close 的配合关系,并给出用 Reader.Next 核对归档边界的原创示例。376 收藏 -
Go 的 regexp.Compile 使用 leftmost-first 规则,CompilePOSIX 使用 POSIX ERE 语法和 leftmost-longest 规则。本文用同一模式对比返回结果,并说明语法、子匹配和选型边界。376 收藏 -
Go 程序在精简容器中调用 time.LoadLocation 报 unknown time zone,通常是镜像没有 IANA 时区数据。本文按查找顺序解释根因,并比较安装 tzdata、嵌入 time/tzdata 与显式加载数据的取舍。375 收藏 -
strings.CutPrefix 不只是删除前缀,更重要的是用 found 明确控制后续分支。本文从协议识别、多个业务前缀、空前缀和旧 Go 版本兼容几个边界,整理一套可复用的判断写法。375 收藏 -
通过一个带节点句柄的任务队列,说明 Go container/list 中 Element 的归属、插入、移动、移除和常见生命周期边界。375 收藏 -
Go 并行子测试要在各自的回调里调用 testing.T.TempDir,让每个用例获得独立且自动清理的目录;父测试提前创建目录再传递会造成共享写入。本文说明目录隔离、并行等待、清理边界和排查清单。375 收藏 -
介绍 Go regexp 命名捕获组的读取方法:用 SubexpNames 对齐名称和匹配结果,用 SubexpIndex 定点取值,并安全处理 nil、-1、可选组和动态正则编译错误。374 收藏 -
本文从 go/types.Info.InitOrder 出发,说明 Go 如何整理包级变量初始化项,并用 AST 与类型检查代码读取 Lhs、Rhs,区分 init 函数、跨包顺序和隐藏依赖。374 收藏 -
Golang · Go教程 | 4天前 | Context · 并发控制 · Go教程 · Go Deadline context.Context 取消信号 context.WithoutCancel
Go context.WithoutCancel 会继续沿父上下文读取 Value,但不继承取消信号、deadline、Err 和 Cause。本文用可观察的字段对照、异步收尾示例和检查清单,说明如何重新建立安全的任务退出边界。374 收藏