Go语言技术文章
-
sync.Map.LoadAndDelete 同时完成读取和删除,真正判断键是否存在要看 loaded,而不能只看 value 是否为 nil。本文用一个可运行的小场景拆开返回值、并发语义和常见误判。133 收藏 -
Go html/template 自动转义后页面显示异常时,不要直接关闭转义。本文从文本、属性、URL 和可信内容边界入手,给出最小排查、修复与复查方法。133 收藏 -
用 Go 标准库边读文件边计算 SHA-256 摘要,不把整个文件一次性读入内存;本文给出 os.Open、sha256.New、io.Copy 的完整写法,并补充错误处理、进度统计与算法选择边界。133 收藏 -
Go json/v2 MarshalWrite 用于把 Go 值直接编码到 io.Writer。本文说明 Writer 与值的参数顺序、编码选项、无换行行为,以及 HTTP 输出发生错误时应直接写出还是先缓冲。133 收藏 -
讲清 Go os.DirFS 的 fs.FS 包装方式、相对路径规则、符号链接边界,以及何时应选择 os.Root.FS。133 收藏 -
Go 解码动态 JSON 时,默认数字会进入 float64,较大的整数可能失去精度。本文说明如何在 Decode 前调用 json.Decoder.UseNumber,何时使用 json.Number.String、Int64 和 Float64,以及结构体字段与动态字段的边界。133 收藏 -
Go 1.23 不能直接 range 结构体,但可以让结构体方法返回 iter.Seq 或 iter.Seq2,再用 range over function 逐项迭代。本文用完整示例说明 yield、提前停止、双值迭代器与 go.mod 版本要求。133 收藏 -
context.WithCancel 只能表达主动取消,不能凭空产生超时。本文用一个可运行的 HTTP 调用场景拆开取消传播、deadline 和超时错误的边界,说明如何选择 WithCancel、WithTimeout 与 WithDeadline。132 收藏 -
Go 的 maps.Keys 可以把 map 的键序列交给调用方继续处理,但它不承诺键的顺序。本文用空 map、无序输出和 slices.Sort 三个边界说明如何安全地收集、排序并验收结果。132 收藏 -
Go 的 time.Duration.Abs 可以把负持续时间转成正值,但对 math.MinInt64 有特殊处理:结果是 math.MaxInt64。本文从源码语义、正常调用和边界测试三个角度说明如何安全展示耗时。132 收藏 -
Go 计算大文件 SHA-256 时,不必先把文件读成 []byte。本文用 crypto/sha256.New、os.Open 和 io.Copy 边读取边累计哈希,并说明文件关闭、输出编码、空文件和重复读取的边界。132 收藏 -
filepath.WalkDir 会访问符号链接这一项,但不会自动进入它指向的目录。本文用 DirEntry、os.Stat 和错误回调拆开链接本身、目标信息、失效链接与权限错误的处理边界。132 收藏 -
strings.ToValidUTF8 能把非法 UTF-8 清洗成合法字符串,但替换长度可能改变后续字节偏移。本文用 DecodeRuneInString 记录原始错误区间,并给出偏移敏感场景的等长替换方案。132 收藏 -
Go 泛型函数不能把 nil 直接返回为任意 T。本文区分类型参数零值与具体可空类型,给出 zero、nilPtr、nilSlice 的写法,并解释无普通实参时为何要显式补全类型参数。132 收藏 -
用 Go httptest.NewServer 构造一个可控的本地 HTTP 服务,把真实上游替换成固定 Handler,再围绕请求路径、请求头、状态码和响应体组织稳定测试。132 收藏