Go语言技术文章
-
用 Go go-geom 的 NewLineStringFlat 把按 X、Y 排列的一维 float64 切片构造成二维 LineString,理解 XY 布局、stride、坐标读取、长度计算与切片复用边界。134 收藏 -
unique.Make 没有缓冲区参数。本文用 Go 逐行标签程序说明如何复用 Scanner 缓冲、转换稳定字符串并保存句柄,区分值去重与记录去重,同时解释输入限制、生命周期和性能判断边界。134 收藏 -
slices.Delete 不负责缩小底层数组或关闭文件等资源。本文区分返回值、Go 1.22 起的尾部清零、容器复制、其他引用与 Close 所有权,给出可选收缩的原创示例。134 收藏 -
go test 第二次执行时出现 cached,并不代表测试失效,而是 Go 复用了成功的包测试结果。本文用一个最小测试项目区分缓存命中与测试未发现,并说明如何用 -count=1 强制当前命令重跑,以及何时应该打开缓存决策日志。134 收藏 -
在 Go 的 select 中,把某个分支使用的局部 channel 变量设为 nil,就能让这个通信 case 暂时不可用;恢复为真实 channel 后分支重新参与选择。本文比较 nil、关闭 channel 和 default 的语义与使用边界。133 收藏 -
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 收藏 -
go mod tidy 在本地与 CI 反复修改模块文件时,如何对齐实际工具链与源码输入,识别测试及标签依赖,并区分 go.mod 和 go.sum 的变化原因。133 收藏 -
time.Time 的 Location 不同并不代表时间瞬间不同。本文用 Equal、==、In 和 Round(0) 说明比较、排序与键值场景的选择。133 收藏 -
Go 的 os.CreateTemp 固定按 0600(受 umask 影响前)创建临时文件,因此权限比 0644 严格通常是正常语义。本文按触发信号、实际模式、受控 Chmod、回滚和跨进程排查说明怎样处理。132 收藏