Go语言技术文章
-
Go workspace 明明写了 use 却没有使用本地模块,通常是路径没有指向 go.mod 所在目录、嵌套模块没有单独加入,或当前命令根本没有加载目标 go.work。本文按症状拆开判断和修复方法。479 收藏 -
在 Go Expr 编译阶段用 AsBool 建立布尔返回契约,配合 WarnOnAny 处理 any 类型表达式,并区分编译错误、运行错误与结果接收边界。479 收藏 -
使用 Go go-diff 的 diffmatchpatch 按行压缩两段文本,经过 DiffMain 计算差异后还原原始行,并处理语义清理、换行和 UTF-8 边界。479 收藏 -
regexp.Regexp 本身没有需要 Close 的资源。本文从正则调用点出发,使用 pprof 区分内存保留、文件与 HTTP 响应体未关闭,以及 goroutine 阻塞等真正的生命周期问题。479 收藏 -
分析 Go 泛型 AST 时,[A, B comparable] 只有一个 Field,但 Names 中包含两个类型参数名。本文从 TypeSpec.TypeParams 出发,给出共享约束的展开方式,并区分声明参数与 IndexListExpr 的类型实参。479 收藏 -
Go types.Scope.Names 会返回当前作用域中已经排序的名称。本文说明如何从 types.Info.Scopes 找到函数 Scope,如何区分当前层、父作用域和嵌套块,以及什么时候才需要自定义排序。479 收藏 -
Go crypto/tls 的 VerifyConnection 会在标准证书校验后接收 ConnectionState,适合补充证书属性、连接状态和恢复连接策略。本文比较默认校验、VerifyPeerCertificate 与 VerifyConnection 的边界,并说明 InsecureSkipVerify 和服务端客户端证书的风险。478 收藏 -
Go maphash.Bytes 可以直接把 []byte 映射为 uint64 哈希值。本文说明 MakeSeed 与 Seed 复用、Bytes 和 Hash.Write 的关系,以及进程边界和密码学用途限制。478 收藏 -
Go 1.23 起可以让 for range 直接消费函数迭代器。本文用一个泛型集合实现 iter.Seq 的 All 方法,说明 yield 返回 false 时如何提前停止,并梳理数据复制、并发和发布前检查边界。478 收藏 -
Go 结构体末尾放置 struct{} 或 [0]byte 时,字段本身仍可能是零大小,但非空结构体会为布局安全保留额外字节。本文比较 go/types.Sizes、unsafe.Sizeof 与字段偏移的适用边界。478 收藏 -
Go JSON 解码到 interface{} 时数字默认会变成 float64。本文比较明确目标类型、UseNumber 和展示型字符串三种选择,帮助你避免大整数精度丢失。477 收藏 -
reflect.Value.IsValid 判断反射值是否存在,reflect.Value.IsZero 判断有效值是否等于其类型零值。本文用 nil 接口、带类型 nil 指针和 reflect.Zero 拆开两者边界,并给出安全调用顺序。477 收藏 -
在 Go 静态分析中,类型别名不能只按 Named 类型处理。本文用 go/types.Alias.Rhs 读取 type A = R 的右侧类型,并说明 Alias、别名链与 types.Unalias 的边界。477 收藏 -
Golang · Go教程 | 2星期前 | 标准库 · JSON · 错误处理 · go · 调试 · Go errors.As encoding/json/v2 SemanticError JSONPointer
Go encoding/json/v2 解码失败时,SemanticError 会携带 ByteOffset、JSONPointer 和 GoType 等上下文。本文用嵌套配置示例说明如何提取这些字段、转换行列位置,并区分语法错误、语义错误与流式读取错误。477 收藏 -
本文用 Go net/http 演示 Cookie.Partitioned 的设置方式,说明它与 Secure、SameSite=None、Path 的关系,以及 Go 版本兼容和响应头排查边界。477 收藏