Go语言技术文章
-
在 Go 网页模板中安全输出表单、评论或搜索词,关键是使用 html/template,让普通字符串按所在 HTML 上下文自动转义,并谨慎处理 template.HTML。151 收藏 -
Go strings.Trim 的第二个参数是字符集合,不是完整子串。本文用边界示例说明 Trim、TrimPrefix、TrimSuffix 与 TrimSpace 的区别,避免裁剪协议前缀和业务标记时误删内容。350 收藏 -
Go 使用 database/sql 查询可空字符串时,普通 string 不能直接接收 SQL NULL。本文通过 sql.NullString、Rows 多行扫描、Go 1.22 的 sql.Null[string] 和 COALESCE 对比,说明如何保留或转换 NULL 语义。152 收藏 -
Go recover 不能跨 goroutine 捕获 panic。本文用一个 panic-safe worker 小项目说明控制栈作用域、直接 deferred recover、error channel 与 WaitGroup 的正确组合。238 收藏 -
Go defer 的函数参数在 defer 执行时就会求值保存,不是函数退出时才读取。本文用参数、闭包、LIFO 和命名返回值示例说明如何判断最终打印结果。468 收藏 -
Go 处理不带时区的日期字符串时,应使用 Asia/Shanghai 配合 time.ParseInLocation,再按需求调用 Unix 或 UnixMilli,避免直接 time.Parse 按 UTC 解释造成 8 小时偏差。261 收藏 -
Go HTTP 接口不必启动真实端口就能测试。本文用 httptest.NewRequest 和 httptest.NewRecorder 构造 Handler 的输入输出,再分别断言请求参数、方法、状态码、响应头和正文,并说明 Handler 单元测试与真实服务器测试的边界。463 收藏 -
Go append 后原切片看起来也变了,根因通常是多个切片共享底层数组且容量仍有余量。本文用 len、cap、三下标切片和 copy 说明复用边界,并给出追加隔离与完全复制的选择方法。130 收藏 -
使用 Go 标准库 archive/zip 将多个服务端文件逐个写入 ZIP,并通过 HTTP 以附件形式下载;文章同时说明条目命名、Close 顺序、临时文件和错误处理。316 收藏 -
Go 切片只是底层数组的一段描述符,直接返回大缓冲区中的小片段时,指针仍可能让整个数组保持存活。本文用切片长度、容量和复制副本说明保留原因,并给出 make+copy、append 复制和指针元素清理的实用边界。213 收藏 -
用 Go net/http 实现文件上传时,同时处理请求体大小、multipart 内存边界、原始文件名清洗、扩展名校验和服务端存储名。254 收藏 -
Go 接口不等于 nil 时,问题通常不是 nil 比较失效,而是接口仍携带动态类型。本文用 typed nil、error 返回和类型断言示例,说明如何定位调用失败并修正返回边界。358 收藏 -
用 Go 的 encoding/csv 逐条读取大文件,处理固定或可变列数,记录 ParseError 的真实行列信息,并说明 ReadAll、ReuseRecord 和 LazyQuotes 的取舍。171 收藏 -
Go 反射读取结构体标签时,Get 的空字符串并不等于“标签缺失”。本文用 StructTag.Lookup 区分缺失键、显式空值与格式错误,并给出可诊断的封装写法。423 收藏 -
Go 的 range 读 Channel 不会因为暂时没有消息而结束,只有发送方关闭通道才会收到结束信号。本文从阻塞复现、单发送者关闭、多发送者协调和提前退出取消四个场景,整理一套不 panic、不泄漏的收尾方式。101 收藏