Go语言技术文章
-
time.AfterFunc 的回调在独立 goroutine 中执行,Timer.Stop 返回 false 时并不代表回调已经结束。本文解释 Stop 与回调并发的原因,并给出可等待回调收尾的安全写法。357 收藏 -
Go 的 Timer.Reset 不能只看方法名:NewTimer 与 AfterFunc 的返回值含义不同,Go 1.22 及更早还要处理旧通道值。本文用判断表和示例说明安全重置边界。382 收藏 -
Go 中解析带小数秒的 RFC3339 时间,使用 time.Parse 配合 time.RFC3339Nano;解析后的小数秒可通过 Nanosecond() 读取,超过纳秒精度的部分会被截断,格式化时还要注意 RFC3339Nano 会去掉末尾零。414 收藏 -
解释 Go time.Format 与 time.Parse 的参考时间布局,重点说明 01 与 1、02 与 2、03 与 15 的区别,并给出格式不匹配和时区问题的排查方法。334 收藏 -
time.Time 的 Location 不同并不代表时间瞬间不同。本文用 Equal、==、In 和 Round(0) 说明比较、排序与键值场景的选择。133 收藏 -
使用 encoding/json.Decoder 解析 JSON 数字时,先调用 UseNumber 保留原始字面量,再用 json.Number.Int64 判断是否为范围内的整数;遇到小数或越界,不要退回 float64,而是保留 Number.String() 和转换错误。397 收藏 -
解释 Go encoding/json 中 omitempty 对零值结构体不生效的原因,区分空值与 Go 零值,并给出指针字段和 omitzero 的选择方法。207 收藏 -
Go 自定义 UnmarshalJSON 时,使用不带方法集的类型别名避免递归调用,再通过辅助结构承接原始字段并区分语法、类型、缺失和业务校验错误。132 收藏 -
Go 的 encoding/json 会把 nil slice 编码成 null,把初始化但长度为 0 的空 slice 编码成 []。本文用最小示例、omitempty 和 API 返回策略说明如何判断与统一这种空值语义。112 收藏 -
使用 encoding/json.Decoder 读取连续 JSON 值时,Decode 返回 io.EOF 表示没有下一个值,是正常结束;io.ErrUnexpectedEOF、语法错误和类型错误都不能吞掉。本文用独立值流和数组两种边界说明正确写法。223 收藏 -
Go 的 URL 转义不要只看函数名:路径段使用 PathEscape,查询参数交给 url.Values。本文用斜杠、加号和空格说明两者的边界,并给出可复用的往返处理流程。399 收藏 -
Go 的 url.QueryUnescape 会把查询字符串中的加号解码为空格,这是查询组件的既定语义。本文说明 %2B、QueryEscape、PathUnescape 与 ParseQuery 的边界,帮助你正确保留字面量加号并处理解码错误。102 收藏 -
Golang · Go问答 | 3天前 | Go问答 · irrFuscator(代码混淆工具) Go net/http Last-Modified ServeContent If-Modified-Since ModTime
http.ServeContent 的 modtime 决定 Last-Modified,并参与 If-Modified-Since 条件请求判断。本文说明文件和内存内容应该怎样提供稳定的修改时间,以及 time.Now、零时间、io.ReadSeeker 和 ETag 的边界。274 收藏 -
Go 客户端使用独立 CookieJar 管理账号会话,结合域名、路径和 PublicSuffixList 判断 Cookie 隔离边界,避免跨账号串状态。250 收藏 -
Go httputil.ReverseProxy 改写请求时,真正要修改的是 ProxyRequest.Out。本文说明 SetURL、Out.Host、入站 Host 和 X-Forwarded-Host 的关系,并给出 Rewrite 的选择方法。400 收藏