Go问答技术文章
-
runtime.GoroutineProfile 的记录数会随 goroutine 创建和退出而变化。本文比较一次分配、带余量的有界重试和 runtime/pprof,给出容量上限、重试上限、records[:n] 截断与失败处理写法。354 收藏 -
Go 1.24 引入 runtime.AddCleanup 后,AddCleanup 与 SetFinalizer 的对象约束、执行顺序、循环引用和取消方式都不同。本文用资源清理场景给出选择和迁移清单。210 收藏 -
Go regexp.Longest 会把整体匹配从最左优先改成最左最长,捕获组因此可能随整体候选一起变化。本文用最小示例解释选择规则、POSIX 差异与并发配置边界。146 收藏 -
reflect.Value.Clear 对 map 会删除全部条目并让长度变为 0,对 slice 则只把当前长度范围内的元素设为零值,长度和容量保持不变。本文用示例讲清别名、nil、Kind 和 CanSet 边界。145 收藏 -
reflect.Value.Comparable 会按动态类型判断值能否安全比较。本文讲清它与 IsValid、CanInterface、Interface、Equal 的正确组合顺序。384 收藏 -
对比 Go filepath.IsLocal 与 filepath.Clean 的职责、边界输入和安全路径拼接方式,说明词法判断与真实文件系统检查不能混为一谈。414 收藏 -
os.File.WriteAt 要求从指定偏移写入,而 O_APPEND 要求普通写始终追加到文件尾,两种语义互相冲突。本文用一个小型文件补丁工具讲清报错原因、正确打开标志和双句柄设计。135 收藏 -
exec.Cmd.Cancel 定义 Context 结束时如何通知子进程停止,WaitDelay 则限制取消后的退出等待和进程退出后的管道收尾时间。本文用两个最小实验讲清组合方式、错误判断与常见误区。124 收藏 -
os.DirFS 只保证交给操作系统的路径带有指定前缀,根目录内的符号链接仍可能指向外部。本文用最小项目说明成因,并给出 Go 1.24+ 的 os.Root.FS 改写方案。431 收藏 -
Go 的 url.QueryEscape 把空格编码成加号,是查询参数采用 application/x-www-form-urlencoded 兼容语义的正常结果。本文通过最小实验说明空格、加号和 %20 的区别,并对比 QueryEscape、PathEscape 与 url.Values.Encode。245 收藏 -
Go 的 netip.Addr.Unmap 只会移除 IPv4-mapped IPv6 的映射前缀。本文用 Is4In6、Is4、As4 和 BitLen 说明何时需要规范化地址、何时应保留 IPv6 语义,并给出统一比较和序列化时的判断清单。304 收藏 -
Golang · Go问答 | 3天前 | 标准库 · 并发安全 · HTTP · 源码分析 · Go问答 · Go 闭包 连接池 net/http http.Transport.Clone TLS配置
http.Transport.Clone 会创建新的 Transport,并让连接池、锁和连接计数保持独立;但回调函数、接口值及 tls.Config 浅拷贝内部引用的对象仍可能共享,需要按隔离目标主动替换。136 收藏 -
Go 的 Request.Body 是一次性读取流,307/308 重定向要保留原方法和请求体时,需要 GetBody 创建新的 body。本文说明 NewRequest 的自动填充、自定义 reader 的缺口和手动补齐方法。422 收藏 -
Golang · Go问答 | 3天前 | Context · 超时控制 · net/http · Go问答 · Go HTTP超时 context.WithTimeout http.Client.Timeout
Go 的 http.Client.Timeout 是同一客户端所有请求共享的总时限兜底,请求 Context 则是单次调用可继承、可手动取消的业务预算。两者都能覆盖连接到响应体读取的完整生命周期,同时配置时更早的截止时间生效。304 收藏 -
Go 的 http.Response.Body 是流式网络资源,调用方必须关闭。对 HTTP/1.x 而言,读到 EOF 再关闭更有利于连接复用;但大响应应有限排空或直接终止,不能为了复用盲目读取。179 收藏