Go语言技术文章
-
Go 的 http.Client 会在重定向时复制初始请求头,但对 Authorization 等敏感头只允许同域或受控子域继续继承。本文结合 CheckRedirect 说明如何收紧跨主机、HTTPS 降级和凭据审计边界。497 收藏 -
Go bytes.IndexByte 接收一个字节切片和单个 byte,返回该字节第一次出现的索引;没有匹配时返回 -1。本文结合分隔记录、索引 0、空数据和 UTF-8 多字节字符说明正确用法。497 收藏 -
Go t.Run 子测试采用唯一语义标识,可让 CI 重跑命令保持稳定。本文比较命名方式,给出分组代码与分段正则,解释重复名、斜杠和父测试执行的边界。497 收藏 -
Go net/http 的请求体是一次性读取资源。Client.Do 会关闭请求体,关闭 TCP 连接也不会把 Body 重置;需要重试或重定向时,应保存原始数据、重新创建 Request,或确保 GetBody 能返回新的读取器。497 收藏 -
解释 Go testing.B.Loop 如何接管基准测试的迭代扩容、计时边界和防编译器消除职责,并说明 b.N 仍可在循环结束后用于自定义指标。497 收藏 -
Go 的 *sql.DB 是连接池句柄,*sql.Tx 才是当前事务上下文。事务开始后继续用 db.Query 或 db.Exec,语句可能落到另一条连接,无法共享未提交状态或随事务回滚。本文给出正确写法和排查清单。497 收藏 -
Go 的 os/exec.StdoutPipe 返回子进程标准输出的读取端,必须先完成管道读取再调用 Cmd.Wait。本文解释管道关闭、输出回压和等待顺序,并给出单路读取、双路消费与 Output 的选择方法。497 收藏 -
sql.Null[T] 的 V 字段即使在 Valid=false 时也必须持有类型 T 的 Go 零值,但这不代表数据库存了零值。本文说明 V、Valid 与 Value() 的语义,并给出避免误判 SQL NULL 的写法。497 收藏 -
Go runtime.GOMAXPROCS 改小后延迟变高,常见原因是可运行 goroutine 受限后排队等待;但在容器中设得过大又可能触发 CPU throttling。本文从 CPU 配额、调度并行度和尾延迟三条线说明如何判断参数边界。497 收藏 -
多个 Go 生产者不要争抢 close 权限:用独立停止信号让生产者退出,用 sync.WaitGroup 确认全部结束,再由唯一协调者安全关闭输出通道。497 收藏 -
Go 中目录名与 package 名不一致通常不会直接导致 import 失败:import path 负责定位目录,package 声明决定默认调用前缀。本文用最小结构拆解 undefined、路径错误和同目录多包名问题,并给出显式别名与 go list 排查方法。497 收藏 -
Go runtime.SetFinalizer 只能作为非内存资源释放的兜底,不能替代显式 Close。本文从 GC 触发时机、进程退出、循环引用、KeepAlive 和幂等关闭几个边界说明正确的资源生命周期设计。497 收藏 -
Go net.Pipe 没有内部缓冲,Write 即使只写少量数据也要等待对端 Read。本文解释阻塞原因,给出并发读写、deadline 和 Close 的排查与处理方式。497 收藏 -
Go 1.26 为 testing.T、testing.B 和 testing.F 增加 ArtifactDir。本文用一个测试产物写入场景,讲清 -artifacts、-outputdir 与临时目录的保留边界。497 收藏 -
Go 1.27 为 hash/maphash 增加 Hasher 与 ComparableHasher。若键类型可比较且业务相等性就是 ==,ComparableHasher 已经够用;需要忽略大小写、按字段比较或支持不可比较值时,应实现满足一致性和无状态要求的自定义 Hasher。497 收藏