Go教程技术文章
-
Go format.Node 不会凭空恢复丢失的注释;要保留注释,应使用 parser.ParseComments,并把同一个 token.FileSet 传给 format.Node。本文比较完整 ast.File、printer.CommentedNode、局部节点和 format.Source 的边界。276 收藏 -
用 Go token.File 将字节偏移转换为文件、行号和列号,说明 AddLine、PositionFor、//line 调整及越界边界。156 收藏 -
讲清 Go constant.BitLen 如何计算整数常量绝对值的二进制位数,并用正负数、零、超大整数和 Unknown 示例区分有效位数、符号位与固定宽度容量。193 收藏 -
初始化 Selections 后执行类型检查,用原始选择器节点取得方法对象、接收者与访问路径,并处理包限定名称和缺失结果。168 收藏 -
讲清 Go scanner.ErrorList.Reset 的复用时机,并用两轮扫描示例区分 ErrorList.Len 与 Scanner.ErrorCount,避免上一轮诊断污染当前结果。248 收藏 -
Go log/slog 中,slog.Group 适合把一条记录的相关 Attr 收进命名组,Logger.WithGroup 适合为子系统建立持续字段路径。本文结合 TextHandler、JSONHandler、LogAttrs 和空组边界,说明如何组织 request、job 与模块日志字段。138 收藏 -
Go flag.FlagSet.Lookup 按名称查找已注册参数,找到返回 *flag.Flag,找不到返回 nil。本文说明如何判定注册关系,并区分默认值、解析后的当前值与用户是否显式设置。429 收藏 -
Go url.URL.AppendBinary 可以把 URL 的编码表示追加到已有 []byte,并返回更新后的切片和错误。本文对照 String 与 MarshalBinary,给出前缀缓冲区、重复追加、解析错误和版本边界的可执行写法。375 收藏 -
Go testing.T.Logf 使用类似 fmt.Printf 的格式串输出测试诊断信息。本文给出单行、多行、子测试和并发场景的原创写法,并说明 -test.v、失败测试与测试生命周期边界。487 收藏 -
Go test -run 不是把完整测试名当成一条普通字符串匹配,而是按斜杠拆成多段正则。本文用嵌套子测试示例说明锚点、特殊字符、shell 引号和筛选排查方法。313 收藏 -
Go ast.Unparen 可提取连续外层括号内部的表达式。本文用层数和节点类型对照配合完整代码,说明它与子树遍历、原树重写、节点共享和诊断位置范围的区别。206 收藏 -
Go scanner.ErrorList.Err 会把空列表转换成真正的 nil 错误,非空列表则返回可继续处理的错误。本文说明 Err 与 Error 的差别、error 接口陷阱和诊断函数的推荐写法。469 收藏 -
Golang · Go教程 | 16小时前 | 调试 · 时间处理 · Go教程 · Go string time.Time time.Time.GoString fmt.GoStringer 调试输出
Go time.Time.GoString 实现 fmt.GoStringer,会把时间格式化为可读的 Go 源码表示。本文用小例子说明它怎样接入 fmt 调试输出,以及它和 String、Format、序列化 API 的边界。321 收藏 -
在 Go 反射代码里,reflect.Value.Kind 用来读取值的基础类别,但 Invalid、命名类型和 nil 值很容易混在一起。本文从一个反射字段分派场景出发,说明 Kind 的安全入口、与 Type 的分工、常见分支和边界取舍。142 收藏 -
Go io.MultiWriter 会按传入顺序逐个写入目标,遇到短写或错误就停止。本文说明 n 与 err 的判断方式、目标顺序设计,以及需要尽力写入多个目标时的显式错误收集方案。370 收藏