-
Go regexp.Regexp.FindReaderIndex 用 io.RuneReader 搜索流式输入时,返回值是匹配区间的字节偏移而不是字符下标。本文说明 m[0]、m[1]、nil 和超前读取的含义,并给出选择其他 API 的边界。
-
Go sync.Cond 的 Signal 和 Broadcast 只是唤醒等待者,不能替代共享条件本身。本文用一个受 Mutex 保护的队列状态说明为什么 Wait 必须放在 for 条件循环中,以及如何在状态更新后选择 Signal 或 Broadcast,避免先检查后等待、误用 if 和忘记解锁。
-
Go crypto/ecdh.NewPublicKey 会按指定曲线校验公钥字节并返回 PublicKey。本文说明 NIST 曲线与 X25519 的编码边界、解析错误处理,以及如何在 ECDH 前保证本地私钥和对端公钥使用同一条曲线。
-
Go bytes.Buffer 读取后 Len 会变小,但 Reset 仍能让同一个对象继续写入。本文拆开读取位置、未读切片、底层存储和复用边界,帮助你避免把 Bytes 返回值保存过久。
-
在 Go 中,for range 遍历结构体切片时,值变量通常是当前元素的一份复制品。直接修改 item.Name 只会改变这份副本,原切片不会变化。本文用排查清单拆开 range 的赋值语义,并给出索引修改、显式写回和指针切片三种写法。
-
Go 的 debug/elf.File.Section 用节区名称查找 ELF 中的单个 Section,找不到时返回 nil。本文从打开文件、按名称定位、读取元数据与内容几个环节说明 Data 和 Open 的区别,并补充 SHT_NOBITS 与压缩节区的边界。
-
比较Go database/sql结果集的自动关闭、defer和显式关闭,区分QueryContext、Scan、Err、Close的错误入口,用完整读取函数处理早退、迭代失败和关闭错误。
-
用 Go net/http 提供静态文件时,http.FileServer 不会替你决定 Cache-Control。本文通过 handler 包装器区分带 hash 的资源和 HTML 入口,讲清缓存头与条件请求的职责边界。
-
用 Go database/sql 调用带 OUT 或 INOUT 参数的存储过程时,掌握 sql.Out、Dest 和 In 的绑定关系,配合 ExecContext 与驱动能力排查,避免输出值无法回写。
-
Go 构造反向代理目标时,应先把后端地址解析成 url.URL,再交给 httputil.NewSingleHostReverseProxy。本文说明 scheme、host、基础路径和查询参数如何参与转发,并比较 Rewrite、SetURL 与旧 Director 的适用边界。
-
说明Go cgo中GoString与GoStringN的选择,用完整示例区分NUL文本和带长度数据,讲清复制、C内存释放责任、内嵌零字节与编码边界。
-
Go 的 build constraints 不是只看文件里有没有 import C,而是由显式 //go:build、文件名后缀、目标平台和 cgo 是否启用共同决定文件是否进入包。本文用一对互补实现说明纯 Go 与 cgo 文件的选择规则、跨编译边界和 go list 排查方式。
-
Go linkname 会绕过未导出声明的封装。本文从需求、符号签名、内存布局、Go 版本、链接器、目标架构和回滚路径几个方面说明使用前必须明确的边界。
-
Go 1.21 之后,go 命令可以按项目要求自动切换工具链。本文用 GOTOOLCHAIN=local 固定当前捆绑版本,说明环境变量优先级、go.mod 约束、local 与 auto 的差异,以及更高版本要求下如何处理。
-
Go work vendor 适合为 go.work 定义的多模块工作区生成共享 vendor 依赖目录。本文说明工作区边界确认、vendor 生成、离线构建入口以及 go.work、go.mod 与 vendor/modules.txt 的一致性排查,并区分 go work vendor 与 go mod vendor 的适用场景。