Go语言技术文章
-
sync.WaitGroup 不能在首次使用后复制,因为复制会把计数器、等待者状态和信号量拆成两份。本文用错误示例说明 Wait 提前返回或一直等待的原因,并给出指针传递、go vet 检查和代码审查清单。124 收藏 -
Go fuzz 测试一直产生新输入时,先区分覆盖率探索与输入域失控,再用 seed corpus、长度格式约束和固定 fuzz 预算缩小空间,让失败样本更快复现。124 收藏 -
Go 没有直接限制 embedding 层级的语法。想控制外层 API,应把匿名嵌入改为命名字段并用包装方法转发;窄接口只能限制调用方的静态视图,遮蔽也不会删除底层成员。124 收藏 -
Go os.CopyFS 复制 embed.FS 时,目录按 0o777 创建并受 umask 影响,文件按 0o666 加源文件执行位创建;本文说明权限检查、已有文件和跨平台边界。124 收藏 -
Go HTTP 超时不一定发生在服务端处理阶段,本文用错误链、Client/Transport 参数和 httptrace 阶段日志,定位 DNS、建连、TLS、响应头或响应体读取层。124 收藏 -
exec.Cmd.Cancel 定义 Context 结束时如何通知子进程停止,WaitDelay 则限制取消后的退出等待和进程退出后的管道收尾时间。本文用两个最小实验讲清组合方式、错误判断与常见误区。124 收藏 -
Golang · Go问答 | 1天前 | CGO · 内存管理 · Go问答 · Go CGO unsafe.Pointer 指针传递 runtime/cgo.Handle runtime.Pinner
Go cgo 传指针最重要的不是指针类型,而是内存由谁分配、是否包含 Go 指针以及 C 是否会在调用返回后保存它。本文按临时借用、C 堆复制、runtime.Pinner 和 runtime/cgo.Handle 说明安全边界。124 收藏 -
这段内容聚焦一个很实用的问题:在 Go 里,怎么把括号中的内容准确提取出来。常见做法主要有两类:一类是用 regexp 包配合捕获组来匹配,灵活度更高;另一类是借助 strings.Index 做轻量级定位,写法更直接、开销也更小。接下来会结合代码示例、性能对比和边界情况处理,把这两种方式各自适合什123 收藏 -
用 Go slices.Chunk 把一批记录切成分页批次,重点说明尾批、空输入、n 校验和切片别名风险,并给出可复现的基线与验收方法。123 收藏 -
解释 Go iter.Pull2 如何把 iter.Seq2 转成逐项拉取的 next 与 stop,重点验证提前停止时为什么必须调用 stop,以及双值序列结束后的边界行为。123 收藏 -
archive/zip.NewReader 要求 io.ReaderAt 和准确的字节大小,不能直接接收只有顺序读取能力的网络流。本文从接口边界出发,比较 bytes.Reader、临时文件和流式解压三种路径,给出资源释放、尺寸校验与安全路径检查的实用写法。123 收藏 -
用 Go channel、固定数量 worker 和 WaitGroup 搭建有界并发工作池,厘清任务投递、队列容量、关闭责任与结果收口,避免无限创建 goroutine 和 send on closed channel。123 收藏 -
filepath.Clean 只做词法清洗,不能单独保护固定根目录。本文用 Go 标准库示例说明如何组合 filepath.IsLocal、fs.ValidPath、filepath.Localize 和 filepath.Join,处理用户路径与跨平台文件名。123 收藏 -
Go database/sql 事务中,业务语句失败、Rollback 失败和 Commit 失败对应不同的处理边界。本文用一段可复用代码说明如何保留原始错误、避免重复回滚,并解释提交失败后为什么要先按幂等键核对状态。123 收藏 -
Go context.WithValue 不要直接使用 string 或 int 作为跨包 key。本文用包内私有 key 类型和类型安全访问器,解决值碰撞、嵌套覆盖与类型断言分散的问题。123 收藏