Go教程技术文章
-
Go 的 SetMemoryLimit 是 runtime/debug 中的软内存上限,不会自动限制 map 缓存。本文用运行时预算、缓存硬边界和淘汰指标三层策略,说明怎样减少无界缓存导致的内存压力,以及为什么上限不能盲目设低。381 收藏 -
Go runtime/trace 通过 NewTask 返回的 context 关联各阶段 WithRegion。原创示例说明跨 goroutine 传递、等待子任务、采集命令及墙钟区间与 CPU 时间的阅读边界。402 收藏 -
Go pprof 的 CPU 采样窗口由 StartCPUProfile 和 StopCPUProfile 之间的代码区间决定。本文用一个可控的业务函数说明文件创建、错误处理、defer 顺序、重复启动边界以及 go tool pprof 的查看方式。226 收藏 -
Go linkname 会改变对象文件符号绑定并绕过普通包封装。本文区分公开 API、握手式 linkname 和单方面拉取内部符号的风险,结合 Go 1.23 之后的链接器限制说明如何评估兼容性与维护成本。380 收藏 -
Go 的 encoding/binary.Size 适合计算固定大小数据的二进制长度。本文用结构体、数组和不可编码字段拆开说明返回值、缓冲区分配与错误处理边界。360 收藏 -
把 C.CString 看成 C 堆上的临时副本:同步调用在分配后立即 defer C.free,C 侧长期保存时按明确的销毁契约释放,C.GoString 复制完成后再回收。205 收藏 -
Go plugin 的兼容性不能只看 .so 文件是否存在。本文按 plugin.Open、Lookup、类型断言和构建环境四道门禁拆解动态符号检查,给出统一导出类型、保留错误上下文和避免运行期崩溃的原创示例。150 收藏 -
Go 的 unicode.IsGraphic 面向 rune 判断 Unicode Graphic 属性,覆盖字母、标记、数字、标点、符号和空格。本文对比 IsPrint,说明如何按 rune 检查并筛选字符串,处理控制字符、空白字符和非法 UTF-8。147 收藏 -
Go HTTP 服务端按 Accept-Encoding 协商 gzip 响应,正确处理 Content-Encoding、Vary、响应头时机和 gzip.Writer 关闭顺序。238 收藏 -
Go 代码中的调试提示、进度信息或可选输出不一定都值得写入测试日志。把输出目标抽象为 io.Writer 后,测试可以注入 io.Discard 让输出静默,也可以换成 bytes.Buffer 做精确断言;本文说明两种方式的边界和错误处理。454 收藏 -
Golang · Go教程 | 2天前 | 网络编程 · 标准库 · go · Socket · SO_REUSEADDR Go net.ListenConfig Control RawConn socket选项
Go 的 net.ListenConfig 没有直接暴露所有 socket 选项时,可以使用 Control 回调在 socket 创建后、绑定前通过 RawConn 设置平台相关参数。本文以 Linux TCP 的 SO_REUSEADDR 为例,说明错误传递、tcp4/tcp6 和跨平台边界。387 收藏 -
Go io.Pipe 的读写端是同步边界;本文用 CloseWithError 把生产错误传给消费者,并区分 EOF、业务错误与提前关闭,避免 goroutine 泄漏。185 收藏 -
Go os/exec 通过 Cmd.Dir 设置子进程工作目录;本文同时说明如何读取输出、区分启动失败与非零退出,并处理跨平台路径边界。360 收藏 -
Go log/slog 的 Attr.Equal 可以按键和值判断两个结构化字段是否一致。本文用测试和 Handler 场景说明普通值、分组值、动态 LogValuer 与零值属性的比较边界。371 收藏 -
Go html/template 会按 URL 上下文处理 href,但业务协议允许列表仍应在数据层明确限制。本文用普通 string、http/https 白名单和根路径规则,说明如何拒绝危险协议并保留模板转义。199 收藏