Go问答技术文章
-
time.Time 的 Equal 比较时间点,== 还会比较 Location 和单调时钟读数。本文用可运行示例拆开两者的边界,并说明 Round(0)、UTC 与序列化后的差异。458 收藏 -
解释 Go strings.Builder.Grow 的保证范围、容量与已写入字节的关系,以及 String 返回值和后续写入之间容易误判的边界。243 收藏 -
json.RawMessage 适合把 JSON 解码延后,但 MarshalJSON 与 UnmarshalJSON 的字节所有权规则不同。本文用最小代码说明何时会复制、何时只是复用已有字节,以及如何避免修改底层切片带来的隐蔽问题。143 收藏 -
解释 bytes.Buffer 的 Available、Len、Cap 与 Grow 如何配合,给出可验证的追加空间判断,以及 AvailableBuffer 的使用边界。365 收藏 -
os.File.ReadFrom 不只是把 io.Reader 读进文件:它会先检查文件状态,再按平台选择专用路径或通用读取循环。本文用 io.Copy、文件偏移和短写场景说明如何判断结果。137 收藏 -
Go 自动化任务常常不是启动后一直跑到底:触发端取消、排队中的任务和已经开始的 worker 都要收到同一个 context 信号。本文用一个小型任务流水线说明 Done、Err、cancel 与 Wait 的职责边界。442 收藏 -
Golang · Go问答 | 5天前 | JSON · go · 数据校验 · 错误排查 · 接口参数 · JSON Go encoding/json 嵌套对象 DisallowUnknownFields Decoder 字段校验
DisallowUnknownFields 只会在目标是结构体时拒绝未知键,嵌套结构体仍会继续校验,但 map、interface 和自定义 UnmarshalJSON 会改变边界。通过一个可运行的配置解码例子,可以看清错误出现的位置以及如何补上严格校验。268 收藏 -
围绕 Go net/http Cookie.Partitioned 说明 CHIPS 的设置方式、Secure 与 SameSite=None 的组合要求,以及浏览器兼容和降级核验边界。227 收藏 -
从一个一次性迭代器出发,拆开 slices.SortedFunc 的收集、比较与返回边界,说明如何处理结构体排序、空序列和比较器契约。317 收藏 -
用 Go 1.24 的 strings.FieldsSeq 逐项读取空白分隔日志,比较 Fields 的切片结果,演示找到目标后短路退出以及字符串切片的生命周期边界。341 收藏 -
Go 1.25 为 testing.T、B、F 增加了 Output 方法。它把 io.Writer 接到同一条测试输出流,保留测试归属和内部缓冲,适合替代 fmt.Println 记录并行测试日志。本文拆开调用链、换行刷新和生命周期边界。408 收藏 -
DecodeRuneInString 遇到非法 UTF-8 时返回 RuneError 和 1,而空字符串返回 RuneError 和 0。掌握 size 的含义,才能在逐字节清洗和校验循环中既不死循环,也不误删后续合法字符。464 收藏 -
Go log/slog 的 HandlerEnabled 适合把动态级别判断前移。本文用 LevelVar 和请求级过滤示例,拆开日志级别、属性改写与上下文边界。304 收藏 -
CloseIdleConnections 只清理 Transport 中已经空闲的 keep-alive 连接,不会打断正在使用的请求。文章用发布切换场景说明它与 Transport 复用、响应体关闭和灰度验证的边界。329 收藏 -
reflect.TypeFor[T]() 能在泛型代码里直接取得类型参数 T 的 reflect.Type,避免用零值或指针哨兵绕一圈。本文用类型注册表拆开 nil、指针、接口类型和缓存键的边界,说明它与 TypeOf 的职责差异。322 收藏