Go教程技术文章
-
Go map 可以在 range 遍历中删除已经判定过期的键,但新增键本轮是否出现没有保证。本文结合缓存清理场景说明直接删除、先收集再删除和延后新增的取舍。230 收藏 -
Go sort.Interface 稳定排序应使用 sort.Stable,切片可用 SliceStable;通过整数优先级案例说明严格比较、重复键等价关系、原始次序与自测方法。319 收藏 -
实现 fmt.Formatter 时,内部再次格式化原类型会重新进入 Format 方法。本文用基础类型转换和无方法类型拆开调用链,并说明 verb、flag 与嵌套字段的安全边界。314 收藏 -
bytes.Lines 返回一个按行迭代的 iter.Seq[[]byte],通常保留每行末尾的换行符,未以换行结束的末行也会被返回。本文说明它的边界,并对比 bytes.Split 与 bufio.Scanner 的适用场景。297 收藏 -
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教程 | 3星期前 | 网络编程 · 标准库 · go · Socket · SO_REUSEADDR Go net.ListenConfig Control RawConn socket选项
Go 的 net.ListenConfig 没有直接暴露所有 socket 选项时,可以使用 Control 回调在 socket 创建后、绑定前通过 RawConn 设置平台相关参数。本文以 Linux TCP 的 SO_REUSEADDR 为例,说明错误传递、tcp4/tcp6 和跨平台边界。387 收藏