Go问答技术文章
-
sort.SliceStable 会在原切片上稳定排序,不会先复制整份元素;如果要保留原顺序,需要先复制切片,但嵌套指针仍需单独深拷贝。479 收藏 -
Go 服务端关闭 HTTP/2 后,客户端仍可能复用已经建立的 HTTP/2 连接。本文区分协议策略与连接生命周期,给出 Server.Protocols、Transport 清理和 httptrace 验证方法。479 收藏 -
Go 的 time.Time 同时承载墙上时间和进程内单调读数,但 JSON 只序列化可跨进程解释的日历时刻。本文说明丢失原因,以及持久化时间、耗时测量和时间比较的正确分工。479 收藏 -
从本地快速改动与跨环境复现两个联调目标出发,对比 Go Modules 的 replace 和 alpha/beta 预览版本,给出选择、检查与收口方法。479 收藏 -
Go 使用 archive/zip 解包时,不能把 ZIP 条目名直接拼到目标目录。本文用相对路径校验、安全根目录映射和先校验后写盘的代码,处理绝对路径、../、反斜杠及 ErrInsecurePath,并说明符号链接和共享目录的额外边界。479 收藏 -
用 bufio.Reader.Peek 预读固定长度协议头时,读取位置不会前移;继续使用同一个 Reader 消费正文即可。文章同时给出复制预读字节、处理 ErrBufferFull 与 io.EOF 的边界方案。478 收藏 -
讲清 Go database/sql 中 MaxIdleConns 与 MaxOpenConns、Idle、InUse 的容量关系,并用 DBStats 判断复用和等待。478 收藏 -
数据库里的 UUID 与 Go 结果不一致,通常是 MySQL swap_flag 或二进制字段映射不一致。本文用 HEX 对照、成对转换和 Go BINARY(16) 读写链路定位并修复字节顺序问题。478 收藏 -
Go 测试包中 embed 文件读不到时,先区分编译期模式匹配、embed.FS 内部路径和 os.ReadFile 工作目录三个边界,再用 go list 查看 TestEmbedPatterns 与 XTestEmbedPatterns,快速定位测试资源归属。477 收藏 -
Go range 中把循环变量地址放入指针切片,旧语言语义下可能出现地址相同和值被覆盖。本文拆开副本、作用域和 Go 版本差异,并给出指向原元素与独立副本的两种稳定写法。476 收藏 -
Go 使用 archive/zip 读取中文文件名异常时,先区分 UTF-8、CP437 和历史本地编码,再用显式解码与路径安全策略处理,避免把乱码或不可信路径直接落盘。476 收藏 -
Go json.Decoder 将 JSON 解码到 interface{} 时,数字默认会变成 float64。本文用 UseNumber 保留 json.Number,再按业务需要转换为 int64、float64 或字符串,并比较结构体、动态 map 与 RawMessage 的适用边界。474 收藏 -
解释 Go mime/multipart 的 NextPart 为什么隐藏 Content-Transfer-Encoding 并在读取时自动解码 quoted-printable,给出 NextRawPart 保留原始字节的写法与选择边界。474 收藏 -
go test -race 变慢通常是正常的检测成本。本文教你固定比较口径,拆分编译、执行、内存和覆盖率影响,并判断哪些测试值得长期运行 race。473 收藏 -
Golang · Go问答 | 3星期前 | channel · select · go · 并发控制 · Go select nil channel Go 动态禁用 select 分支 Go channel 状态控制 Go select 关闭频道
Go select 不能直接删除 case,但可以把参与选择的频道变量设为 nil 来动态禁用分支。本文用一个单值转发循环说明输入、输出、关闭频道和 default 的边界。473 收藏