Go语言技术文章
-
Go 里想让多个 goroutine 同时停止,适合关闭一个只承载通知的 channel,而不是逐个发送停止值。本文讲清关闭者、接收者、select 和 sync.Once 的边界。416 收藏 -
QueryContext 超时后连接仍在 InUse,不一定是连接泄漏。本文从驱动取消能力、Rows.Close、Rows.Err 和 DB.Stats 四个角度说明如何定位回池延迟。416 收藏 -
Go 1.23 的 slices.Chunk 返回的是原切片的连续子切片。本文用一个可运行例子说明修改分组结果为何会影响原切片,以及如何用 slices.Clone 建立独立副本。415 收藏 -
Golang · Go问答 | 2星期前 | go · 路由 · net/http · ServeMux · 兼容性 · Go ServeMux PathValue http.Request.Pattern 路由模式
Go 1.22 引入增强路由后,http.Request.Pattern 可以告诉处理器究竟是哪条 ServeMux 模式命中了请求。本文用 GET /orders/{id} 实验说明 Pattern 与 PathValue 的区别、未命中时的空值行为,以及旧路由兼容判断。415 收藏 -
Go net/url 处理重复查询参数时,应从 url.Values 的 []string 读取并用 Add 追加;本文说明 Get、Set、Encode 与 RawQuery 的顺序边界。415 收藏 -
sync.Cond 的 Broadcast 只负责唤醒等待者,不代表条件已经属于当前协程。本文从有界队列场景拆解 Wait、Signal、Broadcast 的配合方式,解释为什么必须在循环中检查共享状态,并给出可运行的 Go 验证代码、错误写法和回归清单。414 收藏 -
目录扫描不一定要为每个文件再做一次 Stat。本文从 os.ReadDir 返回的 DirEntry 出发,区分 Type 与 Info 的职责,并给出按目录项类型筛选、必要时再调用 entry.Info 的可复现写法。414 收藏 -
Go 1.25 为 testing.TB 增加 Output 方法。本文用一个并行子测试场景说明它与 Log 的关系、缓冲何时刷新,以及测试函数返回后为什么不能继续写入。414 收藏 -
Go 的 regexp.FindAllStringSubmatchIndex 返回的是每个匹配和捕获组的字节偏移,不是字符下标。本文用中文输入、空捕获组和 ExpandString 拆开它的返回结构与边界。414 收藏 -
Golang · Go问答 | 2星期前 | 标准库 · 单元测试 · 资源管理 · Go问答 · Go testing.T.Cleanup Cleanup 注册顺序 Go 子测试资源释放 testing 包
Go testing.T.Cleanup 采用后注册先执行的顺序,并且父测试的清理会等所有子测试完成后才运行。本文用嵌套测试和失败场景拆开注册时机、执行边界与资源释放写法。414 收藏 -
Golang · Go教程 | 1星期前 | 错误处理 · bufio · Go教程 · Go bufio.Scanner Scanner.Buffer 超长行 MaxScanTokenSize ScanLines
Go bufio.Scanner 默认 token 上限约为 64 KiB,扫描日志、CSV 或协议长行时可能返回 token too long。本文解释 Scanner.Buffer 的初始容量与最大上限,比较 Scanner、Reader 和整体读取的选择边界。414 收藏 -
Go 返回短子切片时,普通切片表达式仍会共享大数组。本文用 make+copy、slices.Clone 和 bytes.Clone 说明如何复制窗口数据,并解释三索引表达式为何不能解决内存持有问题。414 收藏 -
go test -race 不负责提供共享变量读取接口,而是报告并发读写之间缺少同步的路径。本文用最小示例说明如何定位 Read/Write 栈,并选择互斥锁或原子读取修复。414 收藏 -
Go 接口如果只返回一段错误字符串,调用方很难判断应该重试、提示用户还是修复参数。本文从订单查询接口的真实场景出发,设计可演进的结构化错误、参数语义、错误映射和兼容策略。413 收藏 -
用 Go 标准库 crypto/ecdh 完成一次可验收的密钥交换,说明公钥 Bytes 序列化、NewPublicKey 恢复、曲线匹配和共享密钥一致性检查。413 收藏