首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

go/printer

  • import "go/printer"
  • 概述
  • 索引
  • 示例

概述

Package printer 实现了 AST 节点的打印。

索引

  • func Fprint(output io.Writer, fset *token.FileSet, node interface{}) error
  • type CommentedNode
  • type Config
  • func (cfg *Config) Fprint(output io.Writer, fset *token.FileSet, node interface{}) error
  • type Mode

示例

Fprint

包文件

代码语言:javascript
复制
func Fprint(output io.Writer, fset *token.FileSet, node interface{}) error

Fprint“漂亮地”输出一个A ST 节点。它使用默认设置调用 Config.Fprint。请注意,gofmt使用制表符缩进但使用空​​格对齐;使用format.Node(go/format包)来匹配 gofmt 的输出。

示例

代码:

代码语言:txt
复制
// 解析源文件并提取没有注释的AST
// 这个函数,位置信息参考
// 文件集fset。
funcAST, fset := parseFunc("example_test.go", "ExampleFprint")

// 将函数体打印到缓冲区buf中。
// 文件集提供给打印机,以便它知道
// 关于原始源格式,可以添加其他内容
// 它们存在于源中的换行符。
var buf bytes.Buffer
printer.Fprint(&buf, fset, funcAST.Body)

// 删除包围函数体的大括号{},unindent,
// 并修剪前导和尾随空白区域。
s := buf.String()
s = s[1 : len(s)-1]
s = strings.TrimSpace(strings.Replace(s, "\n\t", "\n", -1))

// 将清理后的正文文本打印到标准输出。
fmt.Println(s)

输出:

代码语言:javascript
复制
funcAST, fset := parseFunc("example_test.go", "ExampleFprint")

var buf bytes.Buffer
printer.Fprint(&buf, fset, funcAST.Body)

s := buf.String()
s = s[1 : len(s)-1]
s = strings.TrimSpace(strings.Replace(s, "\n\t", "\n", -1))

fmt.Println(s)

type CommentedNode(显示源代码)

CommentedNode 捆绑了一个 AST 节点和相应的注释。它可以作为任何 Fprint 函数的参数提供。

代码语言:javascript
复制
type CommentedNode struct {
        Node     interface{} // *ast.File, or ast.Expr, ast.Decl, ast.Spec, or ast.Stmt
        Comments []*ast.CommentGroup
}

Config 节点控制 Fprint 的输出。

代码语言:txt
复制
type Config struct {
        Mode     Mode // 默认值: 0
        Tabwidth int  // 默认值: 8
        Indent   int  // 默认值:0(所有代码至少按此缩进)

func (*Config) Fprint(显示源代码)

代码语言:javascript
复制
func (cfg *Config) Fprint(output io.Writer, fset *token.FileSet, node interface{}) error

Fprint“漂亮地打印”AST 节点以输出给定的配置 cfg。位置信息相对于文件集fset进行解释。节点类型必须为 ast.Expr,ast.Decl,ast.Spec或 ast.Stmt 的 *ast.File,*CommentedNode,[]ast.Decl,[]ast.Stmt 或赋值兼容。

Mode 值是一组标志(或0)。他们控制打印。

代码语言:javascript
复制
type Mode uint
代码语言:txt
复制
const (
        RawFormat Mode = 1 << iota // 不要使用tabwriter; 如果设置,则忽略UseSpaces
        TabIndent                  // 使用制表符进行缩进,与UseSpaces无关
        UseSpaces                  // 使用空格而不是制表符进行对齐
        SourcePos                  // 发出//line 指令以保留原始源位置
)

扫码关注腾讯云开发者

领取腾讯云代金券