Go语言技术文章
-
Go 遇到 import cycle not allowed 时,问题不是 import 写法,而是包依赖图形成了闭环。本文用 go list 定位循环,并比较接口倒转依赖与共享类型下沉两种拆分方式。446 收藏 -
Go 的 time.Date 不会因为月份或日期越界返回 error,而是按日历规则自动归一化。本文用示例说明自动进位的边界,并给出严格校验年月日的实用写法。287 收藏 -
Go internal 包能否导入,不是只看 go.mod 是否相同,而是看调用方是否位于 internal 父目录树内。本文用目录结构和最小示例解释失败原因,并给出移动目录、公开包和拆分模块的修复边界。380 收藏 -
用一个清晰判断区分 Context 元数据和业务参数:trace_id 等请求范围信息可以传播,userID、订单号和分页条件应回到显式函数签名,并用私有 key 与访问器收口类型断言。488 收藏 -
解释 Go go:linkname 与普通 import 的区别,定位 Go 1.23 标准库内部符号链接失败的原因,并给出公开 API、handshake 与最小验证建议。448 收藏 -
Go select 本身不会提供缓冲空间,带缓冲 channel 负责排队,default 负责满载时立即降级。本文用一个可复用的发送函数说明丢弃、阻塞和退出控制的边界。151 收藏 -
Go 泛型函数使用 == 报 cannot use T as comparable 时,重点检查 any 约束是否过宽。本文说明 comparable 的正确用法、与方法约束的组合、接口运行时边界,以及类型不可比较时如何改用比较键。338 收藏 -
Go 里想让多个 goroutine 同时停止,适合关闭一个只承载通知的 channel,而不是逐个发送停止值。本文讲清关闭者、接收者、select 和 sync.Once 的边界。416 收藏 -
Go 泛型值不能直接写 v.(type),因为类型参数不是接口类型。先转换为 any 再做 type switch;若要匹配当前类型参数,可在接口表达式上使用 case T,并注意实例化后的分支重复。187 收藏 -
atomic.Uint64.Load 只保证单个数值的原子读取,不会把多个计数器自动组成业务快照。本文用 RWMutex 和 atomic.Pointer 说明组合一致性的实现取舍。471 收藏 -
Go 泛型约束并不会自动继承所有类型实参的方法。本文用类型集、方法集和指针接收者示例说明哪些调用能写、哪些必须补进约束。244 收藏 -
sync.Pool 适合复用短生命周期对象,但不适合无上限地保留大缓冲区。本文用容量阈值、Put 前清理和堆画像检查,给出一套避免大对象长期留池的 Go 写法。242 收藏 -
Go 反射调用 Set 失败,先不要把问题归因于类型不匹配。ValueOf 的值拷贝通常不可寻址,指针解引用后才可能获得可设置值;未导出字段和 MapIndex 还有额外边界。本文用 CanAddr、CanSet、Elem 和最小示例快速定位。396 收藏 -
Go 反射访问未导出字段时,Value.Interface 会因封装边界触发 panic。本文用 CanInterface 判断访问能力,并给出类型化读取、公开方法和 DTO 拷贝的选择。330 收藏 -
用 Go sync.OnceValue 封装一次性初始化函数,理解并发调用、返回值缓存、panic 复现以及与 OnceValues、sync.Once 的选择边界。396 收藏