Go问答技术文章
-
Go log/slog 的 HandlerEnabled 适合把动态级别判断前移。本文用 LevelVar 和请求级过滤示例,拆开日志级别、属性改写与上下文边界。304 收藏 -
Golang · Go问答 | 2天前 | Context · 超时控制 · net/http · Go问答 · Go HTTP超时 context.WithTimeout http.Client.Timeout
Go 的 http.Client.Timeout 是同一客户端所有请求共享的总时限兜底,请求 Context 则是单次调用可继承、可手动取消的业务预算。两者都能覆盖连接到响应体读取的完整生命周期,同时配置时更早的截止时间生效。304 收藏 -
Go 的 netip.Addr.Unmap 只会移除 IPv4-mapped IPv6 的映射前缀。本文用 Is4In6、Is4、As4 和 BitLen 说明何时需要规范化地址、何时应保留 IPv6 语义,并给出统一比较和序列化时的判断清单。304 收藏 -
Go reflect.Set 报值不能修改,通常不是 Set 本身有问题,而是 Value 不可寻址或来自未导出字段。本文用结构体字段示例说明 ValueOf、Elem、CanSet 和安全写入函数的关系。303 收藏 -
Go 泛型函数调用时,类型推导主要依据实参与形参的匹配关系和类型约束,不能仅凭接收返回值的变量类型反向猜出类型参数。本文用最小代码说明失败原因、可推导边界与显式类型实参的写法。303 收藏 -
Go base64.NewEncoder 会缓存不足三个字节的尾部数据。本文按输入长度余数说明忘记 Close 时标准 Base64 会少掉多少字符,并给出显式 Close、错误检查和边界回归测试的修复方法。303 收藏 -
bytes.CutPrefix 未匹配前缀时会返回原始切片和 false,返回值依然有效且不产生副本。本文说明底层数组共享、修改风险、空前缀及 bytes.Clone 的使用边界。303 收藏 -
Go 的 time.Time 只按 RFC3339 读取 JSON 时间。遇到 yyyy-MM-dd HH:mm:ss、仅日期或缺少时区的字段,应先接收字符串,再用明确 layout 解析;本文给出结构体、自定义类型和排查清单。302 收藏 -
Go 的 Response.Body 只 Close 不读到 EOF 时,HTTP/1.x 连接可能无法复用。本文按响应大小给出读取、关闭和排查 Transport 的实用写法。301 收藏 -
Go 的 C 回调不能直接把函数值当作 C 函数指针传递。本文用导出函数、C 网关和 runtime/cgo.Handle 说明如何保持回调引用,并按同步、异步和并发注销场景判断安全释放时机。301 收藏 -
FieldsPerRecord 设为 0 不是关闭校验,而是让 encoding/csv 用第一条记录的字段数作为后续标准,因此列数变化仍会返回 ErrFieldCount。真正允许变长记录应设为负数;引号等 CSV 语法错误则不会被该设置忽略。301 收藏 -
errors.Is 只在第一个参数的错误树上匹配:比较当前节点、调用当前节点的 Is(target),再展开子错误。本文解释为何目标值的 Is 不会被反向调用,并给出正确的自定义匹配方式。301 收藏 -
Golang · Go问答 | 2个月前 | interface · 测试 · 架构设计 · Go问答 · Go 接口设计 接口定义位置 Go mock accept interfaces return structs Go 架构
Go 接口通常应放在使用方包里,而不是实现方为了 mock 提前导出一大组接口。本文通过调用方依赖、真实测试与多实现边界,说明什么时候该定义小接口,什么时候直接返回具体类型更清晰。300 收藏 -
清理函数再次 panic 时,直接让第二个 panic 穿过 defer 可能遮住业务异常。本文用局部 recover 和 PanicChain 保留两类信息,并说明三种结果如何处理。300 收藏 -
Go 的 httptest.ResponseRecorder.Code 为 0 不一定代表接口返回了 0。处理器没有显式写状态或响应体时,应在执行结束后调用 Result().StatusCode 读取隐含的 200,并理解 Code、HeaderMap 与 Result 的边界。300 收藏