Go问答技术文章
-
go test -race 报告读写冲突时,不要只看两行文件位置;要沿访问栈、创建栈和共享存储边界确认真正被并发访问的变量,再选择锁、channel 或 atomic 修复。352 收藏 -
Go map 的 range 顺序不保证稳定。本文用排序后的键值表示和顺序无关断言,说明如何写出可重复、能覆盖边界的 map 测试。352 收藏 -
http.Client.Timeout 限制的是一次请求从连接到读取响应体的总时长,不会替调用方管理 Response.Body。本文区分 Close、读到 EOF、连接复用和慢流场景,给出可直接套用的清理写法。352 收藏 -
strings.Builder 首次写入后会记录自身地址;按值复制会让副本携带旧地址,后续 Write 或 Grow 被 copyCheck 判定为非法复制并 panic。修复应改用单一所有者、指针传参或返回字符串。352 收藏 -
slog.Handler.WithAttrs 适合把请求或模块共享的属性提前交给 Handler 复用,但它不是可变日志上下文。本文从属性继承、WithGroup 分组和多 goroutine 使用三个边界说明如何减少重复处理并验证输出。351 收藏 -
Golang · Go问答 | 1个月前 | 并发 · go · pprof · 性能排查 · 可达性 goroutineleak goroutine 泄漏 runtime/pprof Go 1.27
Go 1.27 将 runtime/pprof 的 goroutineleak profile 作为正式能力,但它依赖垃圾回收可达性判断,并不能覆盖所有永久阻塞。本文用全局 channel 场景拆解它能发现什么、为什么会漏报,以及工程上如何补查。351 收藏 -
Go 的 os.CreateTemp 返回时文件仍处于打开状态。Windows 上把路径交给另一个程序前,必须先关闭 Go 文件句柄,再等待外部程序完成后清理临时文件。351 收藏 -
设置 GOOS 和 GOARCH 只改变 Go 的目标平台,不会自动提供目标平台的 C 编译器、头文件和库。本文按 cgo 开关、CC 工具链、编译与链接错误四层排查交叉构建失败。351 收藏 -
Golang · Go问答 | 3星期前 | 错误处理 · net/http · HTTP客户端 · Go问答 · Go clienttimeout http.Client Timeout Go 请求超时 Go url.Error 超时 Go HTTP 客户端时限
Go 的 clienttimeout 通常对应 http.Client.Timeout。本文说明它覆盖的请求范围、如何从 client.Do 返回值中判断超时,以及它与 context 和 Transport 分段时限的区别。351 收藏 -
解释 Go crypto/rand.Read 的完整填充保证,并用 io.ReadFull 处理自定义 Reader 或通用 io.Reader 的短读,避免把不足字节的数据误当成完整令牌。351 收藏 -
Go strings.Trim 的第二个参数是字符集合,不是完整子串。本文用边界示例说明 Trim、TrimPrefix、TrimSuffix 与 TrimSpace 的区别,避免裁剪协议前缀和业务标记时误删内容。350 收藏 -
go mod verify 检查本地模块缓存是否仍与 go.sum 记录一致,而 go.sum mismatch 是下载或校验阶段发现模块哈希不匹配。本文按校验对象、缓存边界和排查命令拆开说明。350 收藏 -
Go http.Transport 设置 DisableKeepAlives 后吞吐下降,通常是连接复用被关闭,重复承担建连、TLS 握手和连接调度成本。本文解释它与 TCP keepalive 的区别,并给出复用、限额和清理空闲连接的配置取舍。350 收藏 -
Go 的 initialization cycle 不是运行时偶发错误,而是包级变量的依赖无法排出合法初始化顺序。本文用直接引用、函数体传递引用和三种拆环方案说明如何定位与修复。350 收藏 -
Go 文件扫描中,os.Stat 会跟随符号链接返回目标对象;需要识别链接本身时应改用 os.Lstat,并结合 ModeSymlink、错误处理和业务决策选择正确的 API。350 收藏