Go语言技术文章
-
Go 使用 net/http 访问 IPv6 地址时,URL 格式错误通常来自缺少方括号或直接拼接 host:port。本文用 net.JoinHostPort 和 url.URL 说明正确构造方式,并区分格式、解析和连接错误。261 收藏 -
Go 的 encoding/json 将数字解码到 interface{} 时默认使用 float64。本文从类型断言失败和大整数精度风险出发,说明 UseNumber、json.Number 与具体结构体的选择。260 收藏 -
用 sql.NullString 扫描 nullable 文本,清楚区分数据库 NULL、空字符串和普通字符串,并说明批量读取、写回和接口映射中的常见坑。260 收藏 -
Go 文件移动应优先使用 os.Rename;遇到跨文件系统错误时,在目标目录创建临时文件复制、Sync、关闭后再 Rename 提交,并正确处理源文件清理失败。260 收藏 -
Go pprof.StartCPUProfile 如果停止太晚,会把无关阶段纳入采样窗口,并让结束时的 profile 写入等待变长。本文用明确的开始、停止和关闭顺序说明如何控制 CPU 剖面范围。259 收藏 -
Go embed 使用目录模式时会默认跳过名称以点号或下划线开头的文件。本文对比 assets、assets/* 与 all:assets 的匹配边界,并给出 embed.FS 读取、构建检查和安全排查方法。259 收藏 -
Go encoding/csv 读取 CSV 时,应先消费并验证表头,再用 FieldsPerRecord 固定数据行列数。本文给出跳过表头、识别 ErrFieldCount 与 ParseError、在入库前完成结构校验的实现方法。259 收藏 -
go.work 与 replace 在 CI 中出错,通常要先确认工作区是否生效,再核对相对路径、module 声明和 require 关系,最后比较代理与私有模块环境。256 收藏 -
t.Parallel 不是把子测试函数立即丢到后台执行,而是在调用点暂停,等父测试函数返回后再进入并行阶段。理解这个边界,才能正确处理循环变量、共享资源和测试并发上限。256 收藏 -
Go slices.Compact 只压缩连续重复值,并会清理新长度之后的尾部。本文结合源码说明 clear 的内存语义、原地复用边界和安全使用方式。254 收藏 -
讲清 Go database/sql Rows 读取 SQL NULL 的正确方式:用 NullString、NullInt64 或 sql.Null[T] 接住空值,结合 Valid 判断、Rows.Err 和 Close 保留完整数据语义。254 收藏 -
讲清 Go fs.WalkDir 遇到权限错误时的回调语义,用 errors.Is 判断权限并返回 fs.SkipDir,保留其他目录继续遍历。253 收藏 -
Go 的 T 与 *T 方法集并不相同。本文用接口赋值、可寻址变量和方法表达式拆开指针方法的调用与转换边界,帮你定位 method has pointer receiver 编译错误。253 收藏 -
Go 的 initorder 是编译器内部的初始化依赖分析,不是应用层排序 API。本文用显式包级依赖、单一初始化器和 init 边界说明如何稳定表达初始化顺序。253 收藏 -
围绕 Go testing.T.TempDir 讲清并行子测试的目录隔离、父测试共享只读夹具、自动清理和 GOTMPDIR 排查边界。251 收藏