当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


GO ParseFile用法及代码示例


GO语言"go/parser"包中"ParseFile"函数的用法及代码示例。

用法:

func ParseFile(fset *token.FileSet, filename string, src any, mode Mode)(f *ast.File, err error)

ParseFile 解析单个 Go 源文件的源代码,并返回对应的 ast.File 节点。源代码可以通过源文件的文件名提供,也可以通过 src 参数提供。

如果 src != nil,ParseFile 从 src 解析源,文件名仅在记录位置信息时使用。 src 参数的参数类型必须是 string、[]byte 或 io.Reader。如果 src == nil,ParseFile 解析文件名指定的文件。

mode 参数控制解析的源文本的数量和其他可选的解析器函数。如果设置了SkipObjectResolution mode 位,则会跳过解析的对象解析阶段,导致 File.Scope、File.Unresolved 和所有 Ident.Obj 字段为 nil。

位置信息记录在文件集 fset 中,不能为 nil。

如果无法读取源,则返回的 AST 为 nil,错误指示特定失败。如果读取了源代码但发现了语法错误,则结果是部分 AST(带有代表错误源代码片段的 ast.Bad* 节点)。通过按源位置排序的扫描器ErrorList 返回多个错误。

例子:

package main

import (
	"fmt"
	"go/parser"
	"go/token"
)

func main() {
	fset := token.NewFileSet() // positions are relative to fset

	src := `package foo

import (
	"fmt"
	"time"
)

func bar() {
	fmt.Println(time.Now())
}`

	// Parse src but stop after processing the imports.
	f, err := parser.ParseFile(fset, "", src, parser.ImportsOnly)
	if err != nil {
		fmt.Println(err)
		return
	}

	// Print the imports from the file's AST.
	for _, s := range f.Imports {
		fmt.Println(s.Path.Value)
	}

}

输出:

"fmt"
"time"

相关用法


注:本文由纯净天空筛选整理自golang.google.cn大神的英文原创作品 ParseFile。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。