Go问答技术文章
-
Go regexp.Compile 返回可处理的错误,MustCompile 失败会 panic。本文按源码常量、运行时输入和热更新配置拆开选择边界,并给出保留旧规则的处理方式。298 收藏 -
解释 Go map 在 range 期间删除和写入的真实边界:单 goroutine 可原地过滤,新增键是否继续遍历不确定,并发读写必须同步。298 收藏 -
Go RWMutex 在写者等待时会阻塞后续读者,长读临界区可能放大延迟。本文以配置查询示例说明锁内复制、锁外处理,并解释递归读锁、升级锁和共享引用的限制。298 收藏 -
讲清 Go debug/dwarf.LineReader.Files 的当前位置语义、文件索引 0、动态文件表,以及 AttrDeclFile 与 LineEntry.File 的安全解析方法。298 收藏 -
Go 中接收方直接关闭数据 channel,会让仍在发送的 goroutine 遇到 send on closed channel panic。本文从关闭语义、channel 所有权、done 停止信号和多生产者协调四步,给出可落地的退出协议。297 收藏 -
Go reflect.Value.CanSet 为 false 时,先区分反射值是否可寻址,再检查字段是否来自未导出成员。本文用值副本与指针 Elem 对比,说明怎样安全修改导出字段,以及为什么未导出字段不应绕过封装。297 收藏 -
go/types.Named.Origin 用来从实例化后的 Named 找回泛型原始定义。本文对照 Obj、TypeArgs、TypeParams 和 Underlying,说明静态分析中如何正确区分实例类型、声明身份、类型实参与底层结构。297 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · 时间处理 · Go问答 · Go 时区 time.Parse time.ParseInLocation time.Location 时间偏移 RFC3339
Go time.ParseInLocation 解析结果看起来偏移,通常是无时区字符串被按不同 Location 解释,或把同一时刻的 UTC 展示误当成时间被修改。本文用 Parse、ParseInLocation、Zone、Location 和 Equal 拆解原因,并给出稳定的输入与排障写法。297 收藏 -
net.Dialer 的 KeepAlive 只能让操作系统在 TCP 层探测空闲连接,不能替代应用层心跳,也不能绕过服务端或中间设备的空闲策略。本文给出可复用的拨号器写法,并说明如何收敛超时、重连与心跳边界。297 收藏 -
Go 通过域名连接时,如果 IPv6 地址优先但链路实际不可达,连接可能出现异常等待。本文拆分 DNS 与 TCP 阶段,说明如何用 DialContext、Fast Fallback 和有限超时处理。296 收藏 -
Go 的 net.DNSError.Timeout 只能表示标准库已知的 DNS 超时,不能把所有 false 都当成没有超时。本文用 errors.As 穿过错误包装,区分已知超时、未找到记录和普通失败,并说明上下文截止时间与重试策略的边界。296 收藏 -
Go GC 回收对象与向系统归还空闲页是不同工作,RSS 不会保证立刻下降。本文用原创采样程序区分 HeapAlloc、HeapIdle、HeapReleased 与系统内存口径,说明主动归还及软内存限制的边界。296 收藏 -
解释 Go defer 参数求值、闭包捕获和 Go 1.22 循环变量语义,给出跨版本固定每轮值的写法。295 收藏 -
net.ParseIP 返回可变语义的 net.IP 字节切片,失败时返回 nil;netip.ParseAddr 返回可比较、不可变的 netip.Addr 和 error,并支持 IPv6 zone。本文按兼容旧接口、集合去重、错误处理和 IPv4 表示说明两者差异与迁移边界。295 收藏 -
json.RawMessage 可以先保留不确定结构的 JSON 字段,再按 kind 选择具体结构体二次解析。本文拆分字段缺失、null、合法结构和类型不匹配,说明结果为空的常见原因与排查清单。295 收藏