生成Go源代码

huangapple go评论90阅读模式
英文:

Generate Go source code

问题

我正在寻找一种生成Go源代码的方法。

我发现go/parser可以从Go源文件生成AST,但找不到从AST生成Go源代码的方法。

英文:

I am looking for a way to generate Go source code.

I found go/parser to generate an AST form a Go source file but couldn't find a way to generate Go source from AST.

答案1

得分: 25

要将AST转换为源代码形式,可以使用go/printer包。

示例(改编自另一个示例):

package main

import (
        "go/parser"
        "go/printer"
        "go/token"
        "os"
)

func main() {
        // src是我们想要打印AST的输入。
        src := `
package main
func main() {
        println("Hello, World!")
}
`

        // 通过解析src来创建AST。
        fset := token.NewFileSet() // 位置相对于fset
        f, err := parser.ParseFile(fset, "", src, 0)
        if err != nil {
                panic(err)
        }

        printer.Fprint(os.Stdout, fset, f)

}

(也可以在这里找到)


输出:

package main

func main() {
        println("Hello, World!")
}
英文:

To convert an AST to the source form one can use the go/printer package.

Example (adapted form of another example)

package main

import (
        "go/parser"
        "go/printer"
        "go/token"
        "os"
)

func main() {
        // src is the input for which we want to print the AST.
        src := `
package main
func main() {
        println("Hello, World!")
}
`

        // Create the AST by parsing src.
        fset := token.NewFileSet() // positions are relative to fset
        f, err := parser.ParseFile(fset, "", src, 0)
        if err != nil {
                panic(err)
        }

        printer.Fprint(os.Stdout, fset, f)

}

(also here)


Output:

package main

func main() {
        println("Hello, World!")
}

huangapple
  • 本文由 发表于 2013年2月6日 16:22:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/14724499.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定