Go语言技术文章
-
Go net.SplitHostPort 遇到无端口、未加括号 IPv6 和空端口时分别怎样处理?本文用地址边界、错误类型、JoinHostPort 和输入预检说明正确写法。491 收藏 -
go test -race 报告读写冲突时,不要只看两行文件位置;要沿访问栈、创建栈和共享存储边界确认真正被并发访问的变量,再选择锁、channel 或 atomic 修复。352 收藏 -
net.ParseIP 返回的 IPv4 地址也是 16 字节,String() 只是显示形式。本文解释 IPv4-mapped IPv6 的统一表示,并给出用 IP.To4() 判断 IPv4 的可靠写法。214 收藏 -
go vet 报 copylocks 通常说明包含 Mutex 等同步对象的结构体被按值传递或复制。本文解释值接收者、参数、赋值和 range 的风险,并给出指针接收者与无锁快照的修复方式。246 收藏 -
Go 的 time.Duration 底层是纳秒计数,裸整数不会自动变成秒。本文用超时、重试和配置解析示例,说明如何显式绑定单位并避开截断与溢出。362 收藏 -
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 收藏