Go语言技术文章
-
用 Go net/http 提供静态文件时,http.FileServer 不会替你决定 Cache-Control。本文通过 handler 包装器区分带 hash 的资源和 HTML 入口,讲清缓存头与条件请求的职责边界。145 收藏 -
Go 生成 GIF 时,局部帧叠加和 Disposal 选择不当会让旧像素残留。本文解释 DisposalNone、DisposalBackground、DisposalPrevious 的区别,并给出编码与排查方法。145 收藏 -
Go csv.Reader 的 FieldsPerRecord 为零时会由首条记录确定后续列数。本文比较零值、正数和负数,解释表头、空字段与 ErrFieldCount,并给出读取策略迁移示例。145 收藏 -
同时读取 Example.Output 与 EmptyOutput,区分显式空输出、未声明输出和非空预期文本。通过带注释的 AST 静态抽取示例,说明记录字段和运行证据的边界。145 收藏 -
database/sql 查询提前返回时,如果 Rows 没有关闭,连接可能持续处于使用中。本文用 MaxOpenConns=1 的最小测试说明阻塞现象,并给出安全读取与排查方法。145 收藏 -
archive/zip.File.Open 返回的是需要关闭的 io.ReadCloser。本文区分整个 ZIP 阅读器与单个归档条目的资源边界,给出单文件读取、循环读取和错误路径下及时 Close 的写法。145 收藏 -
Go select 的多个通信 case 同时就绪时不会按源码顺序固定执行,而是从可进行的通信中均匀伪随机选择。本文解释选择规则、源码顺序与业务优先级的区别,并给出明确优先级的改写结构。145 收藏 -
Go 的 encoding/json 默认会忽略结构体未声明的 JSON 字段。本文用 Decoder.DisallowUnknownFields 在请求边界拒绝拼写错误,说明 json 标签、嵌套结构、单文档尾部检查和可演进事件的取舍。144 收藏 -
Go compress/gzip 的 Name 与 Comment 属于 gzip 文件头元数据,需要在首次 Write、Flush 或 Close 之前设置。本文说明字段职责、编码限制、读取方式以及复用 Writer 时的重置顺序。144 收藏 -
http.Client.Timeout 的零值表示不设总超时,因此请求可能一直等待连接、响应头或响应体。本文用一个可解释的请求预算说明根因、修复写法和阶段边界。144 收藏 -
需要确认 Go 当前是否带有编译实验开关时,先用 go env GOEXPERIMENT 查看有效配置。本文区分空值、显式实验名、none 与无效值,并说明 GOEXPERIMENT 的工具链开发边界。144 收藏 -
Go gopacket可通过LayerTypeTCP查询已有数据包,再受检断言为TCP层。本文给出完整离线示例,区分非TCP、解码错误和有效字段,并说明解码起点与负载生命周期。144 收藏 -
介绍Go fs.WalkDir遍历embed.FS并读取正文的方法,通过完整示例说明子树路径、回调错误和SkipDir,分析资源内嵌的部署收益与更新边界。144 收藏 -
Go 里只想按首个分隔符拆成前后两段时,strings.Cut 用 found 明确表达是否找到;需要多个字段并保留最后一段时,strings.SplitN 通过 n 控制拆分次数。本文用重复分隔符、缺少分隔符和边界参数说明两者的选择。144 收藏 -
Go 的 sync.Cond 不负责保存通知,真正需要等待的是受锁保护的共享谓词。本文从丢失唤醒的症状出发,说明为什么必须用同一把锁配合 for 循环检查条件,并给出 Signal 与 Broadcast 的选择方法。143 收藏