Go语言技术文章
-
Go select 中加入 default 后,消费者在没有消息时会立即返回,放进无限循环就可能形成高频空轮询。本文说明空转根因,并给出阻塞接收、定时退避、批处理和退出信号的选择边界。332 收藏 -
Go 中 <-chan 是只接收通道,close 只能作用于双向或只发送 channel。本文解释这个编译限制的设计原因,并给出生产者关闭、消费者安全接收的写法。332 收藏 -
讲清 filepath.Rel 返回 .. 时的越界判断,给出跨平台的 Go helper,并说明 filepath.IsLocal 与 os.OpenInRoot 的适用边界。332 收藏 -
Go 的 float64 虽然能作为 map 键,但 NaN 与自身也不相等,导致查找和 delete 无法重新命中已写入条目。本文演示问题,并给出入口拦截、clear、过滤重建和稳定键编码方案。332 收藏 -
Go reflect.VisibleFields 会按 FieldByName 的可见性处理嵌入字段:浅层同名字段覆盖深层字段,同层同名字段互相抵消。本文用结构体示例说明冲突判断、StructField.Index 读取路径和 nil 嵌入指针边界。332 收藏 -
Go 内部 HTTPS 服务使用自建 CA 时,不要把 InsecureSkipVerify 设为 true。本文用 SystemCertPool 与 AppendCertsFromPEM 合并信任根,配置 RootCAs,保留主机名校验,并整理证书 SAN、PEM 解析和部署路径的排查边界。332 收藏 -
本文用 Go 1.27 实验性 simd 包实现 float32 最小—最大归一化:标量求 min/max,向量完成减法与除法,并处理尾部、常量数组和 NaN。332 收藏 -
旧式 Go // +build 语法中,空格表示候选项之间的 OR,逗号表示同一项中的 AND,多行约束还要继续做 AND。本文给出等价布尔式、现代 //go:build 写法和 go list 核对方法。331 收藏 -
Go 上传接口不能只调用 FormFile。本文用 MaxBytesReader 限制完整请求体,用 ParseMultipartForm 控制内存阈值,并通过 MultipartForm.RemoveAll、随机落盘名和失败回滚正确清理临时文件。331 收藏 -
围绕 Go //go:embed 资源更新后仍读到旧内容的问题,区分匹配模式、构建缓存、旧进程、模块来源与容器构建上下文,并给出最小排查命令。331 收藏 -
Go 处理外部文件名时,filepath.Join 不能单独构成目录访问边界。本文结合 os.OpenInRoot 和 os.Root,说明固定目录、相对路径、符号链接、Root 生命周期以及平台限制应该怎样设计。331 收藏 -
用 go env -json 导出 Go 命令当前采用的有效编译环境,结合 -changed、指定字段和 Go 程序解析,适合 CI、部署排障与跨机器诊断。331 收藏 -
解释 Go 中 unsafe.Pointer 与 uintptr 的生命周期差异,说明为什么地址整数不能长期保存,并给出受限偏移、真实指针、索引和检查工具的可执行判断方法。330 收藏 -
从 Go pprof goroutine profile 的等待状态和栈顶函数入手,区分通道、锁、网络、定时器与可运行协程,并说明何时切换到 block、mutex profile 或 trace。330 收藏 -
解释 Go json.RawMessage 的字节所有权边界,区分 Unmarshal 已复制和直接切片转换未复制的场景,并给出长期保存原始 JSON 的安全写法。330 收藏