Go问答技术文章
-
Golang · Go问答 | 1星期前 | 反射 · panic · go · 类型转换 · Go strconv reflect.Value.Convert CanConvert ConvertibleTo
reflect.Value.Convert 只执行 Go 允许的类型转换,不负责把字符串解析成数字。本文说明 CanConvert 与 ConvertibleTo 的使用边界、strconv 解析文本的方法,以及 slice 转 array pointer 时必须补充的长度检查。192 收藏 -
通用字段读取逻辑经常同时遇到普通值、指针和接口包装值。本文只围绕 reflect.Value 的 Kind 与 Elem,给出安全归一化、nil 处理和按最终 Kind 读取字段的 Go 写法。230 收藏 -
Go errors.Join 会忽略真正 nil,全部成功返回 nil。通过可选检查示例解释混合输入、错误成员识别及带类型空指针的返回陷阱,并给出聚合错误的适用约定。489 收藏 -
fmt.Errorf 中的 %w 会保留底层错误并建立可遍历的错误链,%v 只把错误格式化为消息文本。本文用最小示例说明 errors.Is 找不到原始错误的原因、排查方法和自定义包装边界。453 收藏 -
Go 接口只有动态类型和动态值同时为空时才等于 nil。把值为 nil 的具体指针返回给 error,会让接口携带该指针类型,从而出现 err != nil。本文用最小示例说明原因、观察方法和正确修复方式。140 收藏 -
Go url.PathEscape 直接处理路径片段时会把斜杠编码为 %2F;如果观察到斜杠,通常是读取了解码后的 URL.Path,或混用了路径拼接与查询参数编码。本文用最小示例区分 PathEscape、QueryEscape、RawPath 和 EscapedPath。462 收藏 -
Go crypto/subtle.WithDataIndependentTiming 用于在回调期间启用架构相关的数据独立时序能力,但不会把普通变长代码自动变成常量时间。本文用 ConstantTimeCompare 说明正确包法、goroutine 作用域、架构差异和安全边界。391 收藏 -
Go map 在 range 期间新增键可能被访问,也可能不会被访问。本文区分单协程修改与并发读写,给出键快照和显式待处理队列两种稳定方案。444 收藏 -
Go sync.RWMutex 的 RLocker 会把读锁能力适配为 sync.Locker:调用 Lock 实际执行 RLock,调用 Unlock 实际执行 RUnlock。本文用通用组件、读写生命周期和边界示例说明怎样安全复用它。261 收藏 -
Go 在 ARM、386 和 32 位 MIPS 上对 64 位原子操作有额外的对齐要求。本文从结构体字段布局入手,说明如何识别中间字段错位、改用类型化原子类型,以及必须使用旧式函数时怎样重排字段。228 收藏 -
sync.Map.Range 能遍历当前可见的键值,但它不提供一致性快照。本文用并发缓存盘点示例说明 Store、Delete 与 Range 的可见性边界,并给出锁、版本号和独立快照三种更可靠的判断方式。392 收藏 -
Go 服务出现请求卡住时,可以用 runtime/pprof 的 goroutine profile 导出当前所有 goroutine 堆栈。本文对比 HTTP 端点和信号触发两种方式,并说明怎样从等待状态与重复栈定位问题。289 收藏 -
Go 中无缓冲结果 channel 如果没有接收方,发送 goroutine 会一直等待。本文用一个具体的结果返回场景说明提前返回为何造成泄漏,并给出取消发送、容量为一的缓冲和通道所有权边界的处理方式。108 收藏 -
Go 1.23 后无引用 ticker 可被 GC 回收,但后台 goroutine 仍持有 ticker 或没有退出条件时,任务依旧会长期存活。本文用生命周期、Stop 和退出信号拆开排查。417 收藏 -
RegisterOnShutdown 适合快速发出协议关闭通知,不应在回调里等待清理完成。本文用 channel、WaitGroup 和超时上下文组织可控的异步退出流程。351 收藏