Go问答技术文章
-
http.Client.Timeout 的零值表示不设总超时,因此请求可能一直等待连接、响应头或响应体。本文用一个可解释的请求预算说明根因、修复写法和阶段边界。144 收藏 -
需要确认 Go 当前是否带有编译实验开关时,先用 go env GOEXPERIMENT 查看有效配置。本文区分空值、显式实验名、none 与无效值,并说明 GOEXPERIMENT 的工具链开发边界。144 收藏 -
go test -json 会把多个包的测试和构建信息写成交错的 JSON 事件流。本文说明如何用 Package 归档测试输出,用 Action、ImportPath 和 FailedBuild 识别构建事件,避免把日志归到错误的包。143 收藏 -
time.Ticker 的 C 通道不是可观测的任务队列,不能用 len 或 cap 判断业务积压。本文解释 Go 1.23 的同步 timer channel 变化,并给出非阻塞接收与显式 backlog 统计的写法。143 收藏 -
Rows.Columns 返回列名顺序,Rows.Scan 按位置写入目标地址。本文解释固定列与动态列的对应规则,并处理 NULL、Close 和 Err 的常见边界。143 收藏 -
Go time.After 放在 select 循环里会在每轮创建新的 Timer。本文解释持续就绪分支下的定时器积压、Go 1.23 的垃圾回收变化,以及如何用一个可复用的 time.Timer 配合 Stop、排空和 Reset 降低分配压力。143 收藏 -
Go io.ReaderAt 的短读不能简单当成失败或成功。本文说明如何保留 n 个有效字节,区分正常尾部 EOF、固定块中途 ErrUnexpectedEOF 与底层 I/O 错误,并封装安全的定长读取函数。143 收藏 -
用 net.ListenConfig.Control 在监听 socket 绑定前设置底层参数,再把批处理循环里的缓冲区复用与结果容量规划分开处理,避免把两类性能问题混成一个开关。143 收藏 -
go/types.Interface.IsMethodSet 用来判断接口是否完全由方法集描述。返回 true 的是普通 basic interface,返回 false 的接口包含类型元素或类型集合,只适合作为泛型约束。本文给出类型检查后的判定代码和迁移注意事项。143 收藏 -
Go net/http 客户端不会把 Authorization 无条件带过重定向。本文说明跨域后敏感头为何被清除,并用 CheckRedirect 限制跨源跳转、处理响应体和错误。143 收藏 -
Go fuzz 测试读取相对路径文件失败,通常不是 fuzz 引擎改变了规则,而是相对路径基准与预期不一致。本文说明 go test 的包目录语义、testdata 夹具布局、fuzz 回调的并发边界,以及 go:embed 和显式绝对路径的取舍。142 收藏 -
Go x/image/font/opentype 的 Hinting 会影响矢量字形节点如何落到像素网格。本文对照 HintingNone、HintingVertical 和 HintingFull,说明小字号变形的原因与排查顺序。142 收藏 -
Go gofpdf 中,SetMargins 负责左、上、右三侧的内容边界,SetAutoPageBreak 的 margin 负责距离页底的自动分页触发线。本文用页面模型和最小代码说明两者的区别、组合方式与常见误区。142 收藏 -
Go atomic.Uint64.And 可以用反掩码原子清除一个状态位,并返回更新前的旧值。本文说明状态位设计、^flag 的原因、旧值判断、版本边界,以及 And、Or、Swap、CompareAndSwap 的选择。142 收藏 -
Go embed FS 资源加载失败时,保留逻辑资源名、失败阶段与底层错误链。小项目区分非法路径、资源不存在和模板解析错误,说明 ValidPath 不保证存在。141 收藏