Go问答技术文章
-
Go http.Server.SetKeepAlivesEnabled(false) 控制的是服务端 HTTP keep-alive,不是 TCP keep-alive,也不能替代 Shutdown。本文说明临时排空、Server 生命周期、优雅停机和常见未生效原因。102 收藏 -
Go sync.Mutex 不支持同一 goroutine 的重入。本文从调用栈定位嵌套 Lock,明确解锁责任,并用带锁入口与无锁核心函数拆分临界区。102 收藏 -
io.CopyBuffer 只有在实际需要缓冲的复制路径中才会使用传入的 []byte。本文说明 nil、零长度、WriterTo/ReaderFrom 快速路径为何会改变结果,并给出串行批处理复用缓冲区、定位分配来源和处理并发边界的写法。102 收藏 -
Go 的 url.QueryUnescape 会把查询字符串中的加号解码为空格,这是查询组件的既定语义。本文说明 %2B、QueryEscape、PathUnescape 与 ParseQuery 的边界,帮助你正确保留字面量加号并处理解码错误。102 收藏 -
Go 反射修改字段没有生效,通常是反射值不可设置、字段未导出或赋值类型不匹配。本文用 ValueOf、Elem、CanSet 和字段类型检查说明安全更新路径。101 收藏 -
Go log/slog 的 Handler.WithAttrs 用来为新 Handler 保留公共属性。本文从 Logger.With 的调用关系讲起,说明如何附加请求字段、为什么原 Handler 不会被修改,以及自定义 Handler 如何处理属性切片、分组和 LogValuer。101 收藏 -
Go Doublestar 的 Glob 面向 io/fs,模式固定使用正斜杠;FilepathGlob 面向宿主机路径,会按系统处理输入并返回系统分隔符。本文用同一类递归匹配场景说明两者的选择边界。101 收藏 -
Go 交叉编译在 CGO_ENABLED=1 时失败,通常不是 GOOS 或 GOARCH 写错,而是目标 C 编译器、sysroot 或原生库没有对齐。本文按基线、工具链、依赖和产物四层给出排查方法。100 收藏 -
Go netip.Addr.Compare 不是按字符串比较 IP,而是先按地址位数,再按地址内容排序。本文说明混合 IPv4、IPv6、区域 IPv6 和无效零值的顺序,并给出可直接用于 slices.SortFunc 的写法。100 收藏 -
Go 的 url.Values.Encode 将查询参数中的空格编码为加号是正常的表单编码语义;本文用最小示例区分空格、字面加号和路径片段,给出解码回路与请求构造边界。100 收藏