Go教程技术文章
-
Go 1.26 放开了泛型类型在参数列表中的自引用约束。本文用 Adder[A Adder[A]] 和 Score 小项目说明如何表达同类型输入输出、判断方法签名边界,并区分类型约束递归与递归数据结构。219 收藏 -
Go regexp.QuoteMeta 会转义普通文本中的正则元字符,让用户关键词按字面参与匹配。本文说明如何只转义动态片段、保留固定规则,并区分模式转义与替换模板边界。219 收藏 -
介绍 Gonum stat.Histogram 的边界、排序和权重约定,提供不修改原始切片的 Go 计数示例,说明右端点、归一化及计数切片复用语义。219 收藏 -
处理代理地址、连接地址或地址键时,IPv4 与 IPv4-mapped IPv6 可能代表同一主机。本文用 net/netip.Addr.Unmap 说明如何识别映射地址、统一表示,并避开 Is4、BitLen 和 As4 的边界误用。219 收藏 -
Go 的 subtle.ConstantTimeCompare 不是任意字符串比较器:长度不同会立即返回 0。本文解释这一设计如何约束耗时模型,并用固定长度摘要给出正确用法。218 收藏 -
Go time.Ticker.Stop 只停止后续 tick,不会关闭 ticker.C。本文解释通道不结束的原因,并用 done channel 与 context.Context 设计可退出的消费循环。218 收藏 -
Go 的 io.Pipe 可把只会写入的生产者连接到只会读取的消费者。本文用完整示例说明同步背压、关闭顺序、错误传播以及避免 goroutine 阻塞的方法。218 收藏 -
Go os/exec 应固定可信程序入口、分项传递参数并限制业务字段。本文用原创导出函数解释参数与命令分离、取消和退出错误、输出生命周期、PATH及平台差异,不把无 shell 等同于任意输入安全。218 收藏 -
Go 配置文件不要直接截断写入。本文用同目录唯一临时文件、Write、Sync、Close 和 Rename 组织一次原子替换,说明失败清理、权限、并发读改写以及平台持久化边界。218 收藏 -
Go HTTP 处理器切换到原始连接时,应先检查 Hijacker 能力,再接收 net.Conn 与 bufio.ReadWriter,并明确接管后的期限、缓冲、Request.Body 和关闭责任。218 收藏 -
Go unicode.ToLower 接收单个 rune 并按 Unicode 大小写映射返回 rune。本文说明它对非字母字符的行为、range 遍历字符串的正确写法,以及如何用 []rune 或 strings.Builder 组装转换结果。218 收藏 -
Go 的 http.Cookie.MaxAge 设为负数会生成立即删除语义,但删除是否生效还取决于 Name、Path、Domain 是否与原 Cookie 一致。本文用响应头、代码和排查表说明 MaxAge 三种取值。217 收藏 -
Go 1.22 及以上版本可以在 http.ServeMux 模式中同时声明请求方法和路径,本文用用户资源路由说明 GET、HEAD、POST、DELETE、PathValue、405 和 Allow 的匹配边界。217 收藏 -
Go channel 的关闭责任应跟随发送方和生命周期所有者划分。本文用单生产者、多生产者、取消信号三种场景说明 close 的位置、协调方式和排查清单,避免向已关闭通道发送数据。217 收藏 -
Go compress/flate 的 HuffmanOnly 只做 Huffman 熵编码,不再寻找 Lempel-Ziv 重复串。它更适合已经经过 Snappy、LZ4 等 LZ 类压缩、但字节频率仍明显偏斜的数据;普通文本直接使用它往往会牺牲压缩率。本文用原创示例说明选择边界、资源收尾和上线前对比方法。217 收藏