Go语言技术文章
-
在C/C++中我们可以使用泛型的方法使代码得以重复使用,最常见例如stl functions:vector<int> vint or vector<float> vfloat等。这篇文章将使用interface{...}接口使Golang实现泛型。 interface{...}是实现480 收藏 -
Go ZIP指定文件读取可通过完整条目名精确匹配完成。本文给出限制解压后大小、拒绝重名并关闭两层资源的写法,说明读取错误、内存归档与完整性边界。479 收藏 -
Go sync.Pool.Get 取到 nil 并不一定是异常,空池、运行时丢弃对象和未配置 New 都可能触发该分支。本文说明如何用 New 集中创建责任、处理类型断言、清理状态并判断对象是否适合放入 Pool。479 收藏 -
用一个可复用的 TextUnmarshaler 类型接入 Go flag.TextVar,讲清默认值、错误处理以及 TextVar、Var、Func 的选择边界。479 收藏 -
sort.Search 找的是谓词第一次返回 true 的位置,不是直接判断相等。本文用升序和降序切片说明先 false 后 true 的单调条件,并处理未命中、重复值、空切片和插入位置。479 收藏 -
用 Go httptest.NewRequest 构造 Handler 入站测试请求:绝对 URL 提供 Host,https scheme 提供非 nil 的 dummy TLS 状态,并说明请求体 ContentLength、Host 覆盖以及与真实 TLS 服务端的边界。479 收藏 -
Go 使用 archive/zip 解包时,不能把 ZIP 条目名直接拼到目标目录。本文用相对路径校验、安全根目录映射和先校验后写盘的代码,处理绝对路径、../、反斜杠及 ErrInsecurePath,并说明符号链接和共享目录的额外边界。479 收藏 -
从本地快速改动与跨环境复现两个联调目标出发,对比 Go Modules 的 replace 和 alpha/beta 预览版本,给出选择、检查与收口方法。479 收藏 -
Go 的 time.Time 同时承载墙上时间和进程内单调读数,但 JSON 只序列化可跨进程解释的日历时刻。本文说明丢失原因,以及持久化时间、耗时测量和时间比较的正确分工。479 收藏 -
Go 服务端关闭 HTTP/2 后,客户端仍可能复用已经建立的 HTTP/2 连接。本文区分协议策略与连接生命周期,给出 Server.Protocols、Transport 清理和 httptrace 验证方法。479 收藏 -
Go atomic.Value 的零值 Load 可以返回 nil,但 Store(nil) 会 panic;本文说明首次 Store 如何固定具体类型,以及如何用结构体或指针安全表达空配置状态。479 收藏 -
Go regexp 的 Index 系列方法返回的是原字符串字节区间。本文用完整匹配和捕获组两个示例,说明如何安全切回原文、处理负数下标,并把中文文本的位置转换为字符序号。479 收藏 -
Go 1.22 引入 reflect.TypeFor 后,泛型函数可以直接拿到类型参数 T 对应的 reflect.Type。本文用一个小型类型描述器说明 TypeFor、TypeOf、Kind 和 Implements 的边界。479 收藏 -
sort.SliceStable 会在原切片上稳定排序,不会先复制整份元素;如果要保留原顺序,需要先复制切片,但嵌套指针仍需单独深拷贝。479 收藏 -
Go math/bits.Mul 返回 hi 和 lo 后,如何判断乘积是否超出低半部,以及怎样用 Mul64、math/big 重建并核对完整结果。479 收藏