Go语言技术文章
-
strconv.ParseFloat 可以解析 1.25e3 这类科学计数法,但精度由 bitSize 决定。本文用 Go 示例说明 32/64 位舍入、NumError 分类、ErrRange 判断和后续存储的边界。455 收藏 -
Go 的 time.Ticker 不是保存每次节拍的事件队列。本文解释接收方变慢时 tick 为什么会被丢弃,并给出按时间补偿、计数和可靠事件记录的选择方法。455 收藏 -
url.ParseQuery 会把重复键保存为字符串切片;未编码分号会让对应片段无效,但有效参数仍可能保留。本文讲清读取方式、错误处理与 HTTP 接口边界。455 收藏 -
讲清 Go exec.CommandContext 如何在启动前替换 Cmd.Cancel,用协作式信号代替默认 Kill,并结合 WaitDelay、os.ErrProcessDone 与 ErrWaitDelay 处理退出边界。455 收藏 -
Go slog.GroupAttrs 只负责构造组属性,符合契约的 Handler 会忽略没有有效属性的组。本文通过动态字段示例说明调用端条件追加、零 Attr 过滤与自定义 Handler 排查方法。455 收藏 -
Go 规范明确规定 map 遍历顺序未指定,同一 map 的多次 range 也不保证一致。需要稳定输出时,应先收集键并排序,再按键读取值;测试则按目标选择 maps.Equal 或确定性序列化。455 收藏 -
WalkDir 的错误处理关键不在于一律忽略,而在于区分错误范围与结果完整性,再选择返回错误、继续遍历、跳过目录或停止全局遍历。455 收藏 -
Go 1.27 支持具体类型的泛型方法,但嵌入泛型类型后仍要按实例化类型、值/指针接收者和接口固定签名计算方法集。本文用结构体与接口示例拆解常见误判,并给出排查清单。455 收藏 -
使用 sync.WaitGroup 收尾并发任务时,关键不是把 Wait 放在最后,而是保证任务计数先建立、空 WaitGroup 上的 Go 先于 Wait,并在复用前等上一轮 Wait 返回。本文对比 WaitGroup.Go 与 Add/Done 的调用顺序,给出一份可直接落地的并发收尾写法。455 收藏 -
Go 动态解析 JSON 时,默认数字会进入 float64。使用 Decoder.UseNumber() 保留 json.Number,再按 Int64、math/big 或字符串边界转换,避免大整数静默丢失精度。454 收藏 -
Go encoding/gob 传输接口值时需要注册实际承载的具体类型。本文用 Shape 和 Circle 拆解静态类型、动态类型与流中类型名的关系,给出值和指针注册边界、跨进程初始化方式,以及用错误数、分配次数和消息大小验证修复的方法。454 收藏 -
解释 Go flag.VisitAll 为什么会枚举未显式设置的默认参数,对比 Visit 的实际设置集合,并给出完整配置带设置标记的可靠写法。454 收藏 -
Golang · Go问答 | 3星期前 | 超时 · 错误处理 · go · Context · Go context.Err context.DeadlineExceeded context.WithDeadline context.Canceled
Go context.WithDeadline 提前调用 cancel 时,ctx.Err() 返回 context.Canceled;只有 deadline 先到期才返回 context.DeadlineExceeded。本文用可复现代码区分主动取消、父级取消和真正超时。453 收藏 -
Go TLS 按 IP 校验证书失败时,关键不是继续改 CommonName,而是读取证书的 IPAddresses SAN。本文用一段最小 Go 代码定位缺失、错配和校验输入问题。453 收藏 -
Go 接口处理时间字段时,Unix 时间戳和 RFC3339 文本应按输入协议分别解析。本文用 time.Parse、time.Unix 和单位检查整理一套可复用的选择规则。453 收藏