Go语言技术文章
-
用 Go httptest.Server 搭建可控的外部 API 替身,检查请求方法、路径、请求体和响应错误,并处理响应体与测试服务的关闭边界。490 收藏 -
从 go env 确认 GOMODCACHE 实际路径,区分 GOPATH/pkg/mod 与 GOCACHE,再用父目录、属主和最小写入测试定位权限错误,并给出迁移与复查方案。490 收藏 -
unsafe.String 只把一段连续字节按指定长度解释为字符串,不会替你检查对象类型、所有权或 UTF-8。本文从 []byte 的正确入口讲清指针、长度、可修改性和生命周期边界,并给出该复制时的判断方式。490 收藏 -
Go encoding/xml 中,嵌套类型的 XMLName 显式标签与外层字段标签不一致会触发名称冲突。本文用固定根节点和可复用子节点两个写法说明如何稳定解码,并梳理命名空间、大小写和 Marshal 的边界。490 收藏 -
panicreturn 不是 Go 内置关键字,而是用命名返回值、defer 和 recover 在函数边界内把可隔离的 panic 转成 error。本文说明边界选择、goroutine 保护、资源清理和测试重点。490 收藏 -
go list -m all 展示的是模块构建列表,不等于某个目标包实际编译进二进制的全部依赖。本文从模块模式、vendor、workspace、构建条件和二进制 BuildInfo 五层排查版本不一致。490 收藏 -
用 Go 的 os.DirFS 和 fs.ValidPath 读取固定目录资源时,先建立 io/fs 路径契约,再区分语法校验与符号链接隔离,避免把相对路径校验误当成完整的根目录安全边界。490 收藏 -
Golang · Go教程 | 1个月前 | 定时任务 · Context · 并发编程 · Go教程 · select time.Ticker context取消 goroutine退出 Go ticker
Go 定时循环阻塞在 ticker.C 时,应该把 ctx.Done 与 ticker.C 放进同一个 select,并把 context 继续传给业务处理;退出路径里调用 ticker.Stop,再等待 worker 收尾。本文区分 Stop、Reset 和重新创建,避免 goroutine 泄漏与错误的通道判断。490 收藏 -
Go 1.27 为 net/url 增加 URL.Clone 和 Values.Clone。本文从请求模板复用场景出发,说明浅复制为何会共享可变查询参数、如何分别复制 URL 与 Values,以及 RawQuery、Query 和 Encode 之间的边界。490 收藏 -
围绕 Go 1.25 的 crypto.SignMessage 与 MessageSigner,拆解如何让签名封装同时兼容自带哈希和外部哈希的签名器,并验证回退路径与错误边界。490 收藏 -
在Go应用中可安全同时导入MySQL和Oracle数据库驱动,二者通过不同驱动名注册,互不冲突,sql.Open调用时指定对应驱动名即可建立独立连接。 在Go应用中可安全同时导入MySQL和Oracle数据库驱动,二者通过不同驱动名注册,互不冲突,`sql.Open`调用时指定对应驱动名即可建立独立490 收藏 -
Golang · Go问答 | 2个月前 | net/http · Go问答 · 接口安全 · 版本迁移 · ServeMux · net/http 通配符 路由冲突 ServeMux Go 1.22 PathValue
Go 1.22 改造了 net/http.ServeMux 的模式语法和优先级,旧项目迁移时最容易踩到方法覆盖、通配符冲突和大括号语义变化。本文用最小代码验证匹配规则、冲突触发条件和上线前的兼容检查。490 收藏 -
SumDB是Go官方维护的不可篡改模块校验和日志,goget卡住主因是客户端无法连接或验证SumDB(如本地哈希与官方记录不一致、私有模块404等),而非单纯网络慢;需区分GOPROXY(下载)与GOSUMDB(校验)职责,优先用sum.golang.google.cn镜像或代理+校验双保底,禁用仅限可信私有场景。490 收藏 -
sync.Pool适用于短生命周期、结构固定的临时对象复用,需手动重置状态、清空敏感数据,New函数仅在Get返回nil时调用且不保证唯一性,不适合长生命周期或大小不稳定的对象。490 收藏 -
手写KMP的核心价值是“可控”而非“更快”,支持多次复用模式串、获取所有匹配位置、流式增量匹配,并可定制失配逻辑、忽略大小写等;其关键步骤为构建next数组、主串遍历、失配查表跳转。490 收藏