Go问答技术文章
-
自定义断言函数不调用 testing.TB.Helper 时,测试失败位置常常落在断言库内部,排查成本很高。本文用一个最小断言函数说明 Helper 如何改变失败行号、为什么要放在函数入口,以及在 TB 接口、子测试和并发调用中的边界。239 收藏 -
Go 的 bytes.Cut 适合按首个分隔符拆出 before、after 和 found 三个结果。本文从空片段、缺少分隔符和请求头解析中的误判出发,说明如何用 found 区分合法空值与格式错误。466 收藏 -
Go 的 base64 解码遇到截断或非法字符时,会返回部分结果和 CorruptInputError。本文用 DecodeString、Decode 和 RawStdEncoding 对比补位、换行与错误位置的判断方式。404 收藏 -
Go io.Pipe 的写入端提前关闭时,读取端可能看到 io.EOF 或具体错误。本文用最小示例梳理 Close、CloseWithError、Read 返回值和排查顺序。428 收藏 -
io.ReaderAt 的 ReadAt 可能同时返回已读字节和 io.EOF。本文用可运行示例拆开 n、len(p) 与 err 的判断顺序,说明文件尾、部分读取和完整读取时的安全处理方式。263 收藏 -
用 runtime/trace.NewTask 给跨 goroutine 的业务操作建立可追踪边界,说明 context.Context 如何传播任务、task.End 如何收口,以及 trace.WithRegion 与 go tool trace 的分工。307 收藏 -
bytes.Buffer Reset 只把当前长度归零,不会自动擦除底层数组。本文用 Bytes、Reset 和 Write 的实际关系解释旧切片为何还能读到内容,并给出安全复用与释放引用的判断方法。144 收藏 -
http.Header.Get 找不到请求头和请求头值为空时都会返回空字符串。本文用 http.Header、Header.Get 与逗号 ok 判断拆开这两个状态,并给出适合接口校验的写法。482 收藏 -
Go 泛型调用省略类型参数时,编译器要从实参、函数签名和约束中建立类型关系。本文用可编译示例说明推断成功与失败的边界,以及何时补写显式类型参数。450 收藏 -
调用 context.WithCancel 只能发出取消信号,不能替你证明子协程已经结束。本文用一个可复测的 worker 示例说明如何结合 ctx.Done、defer wg.Done 和 Wait 确认退出,并指出常见的提前返回与阻塞边界。424 收藏 -
Go 程序放进容器后,runtime.GOMAXPROCS 返回的并发上限和宿主机核数不一定相同。本文用运行时探针区分逻辑核、CPU 配额与调度上限,解释容器内核数判断的边界,并给出可复现的检查代码。447 收藏 -
Go 1.25 为 go doc 增加 -http 选项,可以把指定对象的本地文档通过浏览器查看。本文用 net/http 演示启动方式、端口排查和文档范围判断。470 收藏 -
Go 1.23 引入 runtime/debug.SetCrashOutput,可把未处理 panic 和致命运行时错误额外写入文件。本文用一个可运行的最小例子解释文件句柄复制、关闭时机、覆盖规则与并发替换边界。125 收藏 -
Golang · Go问答 | 3天前 | web安全 · net/http · Go问答 · origin csrf Go 1.25 http.CrossOriginProtection Sec-Fetch-Site
Go 1.25 的 http.CrossOriginProtection 能拦截非安全跨源浏览器请求。本文从 Handler 接入、Origin 白名单和安全方法边界说明它适合替代哪些旧防护,以及上线前要补的检查。466 收藏 -
Golang · Go问答 | 3天前 | 标准库 · 跨平台 · 安全 · Go问答 · 文件路径 · Go path/filepath clean 路径安全 路径穿越 filepath.IsLocal
处理用户传入的文件名时,先用 filepath.IsLocal 做词法边界检查,再把通过的路径交给 filepath.Join;本文说明 Clean、绝对路径、空字符串和符号链接之间各自能解决什么问题。413 收藏