Go教程技术文章
-
Go io.ReaderAt 适合按偏移读取固定长度记录。本文用偏移公式、完整读取示例和错误表,说明如何处理短读、EOF、溢出和底层 I/O 错误。333 收藏 -
Go 使用 slices.SortStableFunc 并让相同排序键返回 0,可以保留本次输入中等价记录的相对次序。本文区分批内稳定性与跨请求确定性,说明切片复制、分片收集和次级键的取舍。309 收藏 -
Go HTTP 服务优雅关闭的关键是先停止接收新连接,再等待活跃请求回到空闲;本文用 signal.NotifyContext、Server.Shutdown 和超时兜底组成可直接复用的关闭流程,并说明 WebSocket 等长连接的额外边界。157 收藏 -
Go Ticker.Stop 不会关闭通道,也不会终止工作 goroutine。通过串行周期任务示例,说明计时器所有权、Context 取消、done 完成确认,以及慢任务和新旧计时通道语义。295 收藏 -
Go 交叉编译时,纯 Go 项目可以通过 CGO_ENABLED=0 关闭 cgo,再用 GOOS 和 GOARCH 选择目标平台。本文从构建命令、go env 检查、cgo 构建约束和纯 Go 替代实现四个方面说明可执行做法与依赖边界。487 收藏 -
go env -w 会把 Go 环境变量的默认值写入每用户配置文件,适合持久化 GOPROXY、GOFLAGS 等工具链设置。本文比较它与 export、命令行参数和项目配置的边界,并给出读取、撤销和协作场景的选择方法。130 收藏 -
Go私有模块可通过GONOSUMDB按路径设置校验数据库例外。本文比较仓库直连与企业代理方案,说明GOPRIVATE继承、GONOPROXY覆盖、go.sum和访问权限的边界。184 收藏 -
Go work 用 go.work 把多个独立 Go module 放进同一 workspace,让本地联调可以直接读取模块改动。本文按迁移变更单的方式说明目录、use、模式切换、测试与交付边界。245 收藏 -
Go mod why 展示的是从主模块到目标包的最短包级引入路径。本文结合实际排查依赖的经历,说明普通查询、-m、-vendor 与 go mod graph 的区别,以及出现未引用提示时怎样判断。394 收藏 -
Go 中修改已有 URL 时,不要直接拼接查询字符串。本文用 net/url 解析 URL,通过 Query、Set、Del 和 Encode 只更新 RawQuery,同时保留路径、主机和片段。274 收藏 -
用 Go execution trace 采集短窗口运行时事件,结合 go tool trace 观察 goroutine 调度、阻塞、系统调用与 GC,并明确它和 pprof 的分工。351 收藏 -
Go pprof 定位 CPU 热点函数的关键,是先采集能代表真实负载的 CPU profile,再用 go tool pprof 对比 flat、cum、list 和调用关系,最后回到源码行复采确认。321 收藏 -
Go benchmark 会把计时从 benchmark 开始处算起,初始化放错位置就会污染 ns/op。本文用 ResetTimer、StopTimer/StartTimer 和 benchmem 说明怎样只测目标操作。266 收藏 -
bytes.Buffer 的 Reset 会清空当前长度,但会保留底层存储。本文用 Len、Cap 和阈值策略说明如何复用正常大小的缓冲区,并隔离偶发的大容量缓冲区,避免复用池长期持有异常对象。235 收藏 -
Go Fuzz 可以把解析器的正常样例、空输入和历史失败语料放进种子集合,再用覆盖率引导生成新的字节输入。本文从 FuzzXxx、f.Add 和 f.Fuzz 写起,说明如何检查解析结果、运行限时模糊测试,并把失败输入保留为回归语料。485 收藏