Go问答技术文章
-
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问答 | 2星期前 | 标准库 · 并发安全 · 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问答 | 2星期前 | 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 收藏 -
Go DNS 查询失败时,用 errors.As 找到 *net.DNSError,再区分 IsNotFound、Timeout 与 Temporary,决定停止、有限重试还是继续排查。391 收藏 -
multipart.ReadForm 会把超出内存预算的文件部分落到临时目录,Form.RemoveAll 用于删除这些临时文件。本文区分 net/http Server 自动清理与独立解析时必须手动清理的边界。216 收藏 -
Golang · Go问答 | 2星期前 | 标准库 · 错误处理 · Go问答 · Go MIME Content-Type charset boundary mime.ParseMediaType 参数键
Go mime.ParseMediaType 会把媒体类型和参数键规范化为小写,但参数值保留原大小写。本文说明 charset、boundary 的读取方式、错误边界,以及 FormatMediaType 的往返注意点。188 收藏 -
Go 的 math.Round 明确定义为就近取整,恰好半数时远离零,因此 2.5 得 3、-2.5 得 -3。本文用边界测试对比 RoundToEven,并说明小数位与金额场景的选择。422 收藏 -
big.Int.SetBytes 的契约是把输入解释为无符号大端整数,因此不会读取符号位。需要负数时,应由协议明确符号字段,或按固定字节宽度自行解析二进制补码。349 收藏 -
maps.Clone 会创建新的 map 容器,但键和值只按普通赋值复制;值中若含切片、指针或 map,副本仍可能共享底层数据。本文用配置快照案例讲清判断方法、定制复制与测试门禁。131 收藏 -
Go slog.Group 只传组名却看不到字段时,通常是空组被 Handler 忽略。本文区分空组、空 key 组和非空组,并说明 TextHandler、JSONHandler 与自定义 Handler 的处理边界。250 收藏 -
fs.Sub 只把 io/fs 的逻辑名称映射到子目录,不参与操作系统对符号链接的真实解析,因此不能把 os.DirFS 变成安全沙箱。本文用最小示例解释越界原因,并给出 Go 1.24+ 的 os.Root 做法。248 收藏 -
解释 Go io.SectionReader.Size 为什么固定返回 section 长度,并区分它与 Read、Seek 改变的当前偏移,给出顺序读取、随机读取和边界判断的实用写法。176 收藏