Go语言技术文章
-
Go genetlink 中 Protocol、Family.ID、Family.Version 和 Header.Version 位于不同层次。本文用 generic netlink 请求说明家族版本与协议版本的区别,以及如何避免把错误数字写入命令头。157 收藏 -
Go net.SplitHostPort 解析带端口的 IPv6 地址时,方括号用于标出主机边界。本文解释 too many colons、missing port、zone 和 JoinHostPort 的关系,帮助你正确生成与拆分 host:port。157 收藏 -
用bits.Mul64取得uint64乘法的完整高低位,解释高位判定溢出、低位为零的含义、返回状态以及重组和类型转换的常见错误。157 收藏 -
Go go/constant.Sign 只返回 -1、0 或 1,但非零复数和 Unknown 也可能得到 1。本文从普通数值、复数和未知值三个场景说明 Sign 的语义,演示如何先判断 Kind 再做符号分类,并给出何时改用 Compare、Real 和 Imag 的边界。157 收藏 -
Go 的 sync.RWMutex 不支持把 RLock 直接升级成 Lock。持有读锁时获取写锁会等待包括自己在内的读者退出,正确做法是释放读锁、获取写锁并重新检查共享状态。157 收藏 -
Go http.Request.Pattern 保存的是 ServeMux 实际匹配的路由模式。本文用 GET /orders/{id} 示例说明怎样读取 Pattern、怎样用 PathValue 取得变量值,以及直接调用 handler 和客户端请求导致空字符串的边界。156 收藏 -
Go 解析 YAML 配置时,普通值字段会把缺失、显式空值和合法零值揉成一个结果。本文用指针字段、默认值阶段与校验顺序拆开这三种状态,避免默认值覆盖用户明确传入的空值。156 收藏 -
Go 的 url.URL 中,Host 保留主机与可选端口,Hostname() 返回不带端口的主机名。本文用域名、显式端口、相对路径和 IPv6 说明两者的选择边界。156 收藏 -
Go 同包测试运行在同一个测试进程里,包级可变变量会被前一个测试留下的状态影响。本文区分普通测试、子测试、t.Parallel、TestMain 与测试缓存的边界,并给出保存恢复和工厂函数两种隔离写法。156 收藏 -
Go multipart 上传文件读到空内容,常见原因是字段名或 boundary 不匹配、请求体被提前消费、文件流已经位于 EOF。本文用 FormFile 与 MultipartReader 说明如何按证据定位并修复。156 收藏 -
ResponseController.Flush 返回成功只代表 Go 端把当前缓冲交给下一跳,经过反向代理后仍可能被代理继续缓存。排查时先确认 ResponseWriter 的 Flush 能力,再关闭对应接口的 proxy_buffering 或设置 X-Accel-Buffering: no,并区分直连与代理链路。156 收藏 -
Go test -run 使用不锚定正则筛选测试,遇到子测试时还会按斜杠拆分名称;本文整理顶层测试、t.Run 路径、名称清洗和命令引号导致匹配不到的排查方法。156 收藏 -
Go 的 csv.Reader 遇到不等长字段时返回 ErrFieldCount,根因通常是 FieldsPerRecord 的固定字段数约束。本文解释 0、正数、负数三种配置的差异,并给出严格校验、容忍变长记录和按业务规则整形的实用写法。156 收藏 -
Go embed pattern 无匹配文件时,先按源码包目录定位资源,再恢复编译前的真实产物。结合包内目录示例说明空目录、隐藏文件、上级路径与构建流水线的修复取舍。156 收藏 -
sync.Once 的回调函数内部再次调用同一个 Once.Do 时不会被当作已完成调用,而是等待当前回调结束,因此会卡在同一把互斥锁上。本文拆解死锁原因并给出不重入的初始化写法。156 收藏