gox 一个方便的Go代码生成库_步子哥的博客-CSDN博客_go 代码生成

package main import (        "go/token"        "go/types"        "os"         "github.com/goplus/gox") func ctxRef(pkg *gox.Package, name string) gox.Ref {        return pkg.CB().Scope().Lookup(name)} func main() {        pkg := gox.NewPackage("", "main", nil)        fmt := pkg.Import("fmt")        v := pkg.NewParam(token.NoPos, "v", types.Typ[types.String]) // v string         pkg.NewFunc(nil, "main", nil, nil, false).BodyStart(pkg).                DefineVarStart(token.NoPos, "a", "b").Val("Hi").Val(3).EndInit(2). // a, b := "Hi", 3                NewVarStart(nil, "c").Val(ctxRef(pkg, "b")).EndInit(1).            // var c = b                NewVar(gox.TyEmptyInterface, "x", "y").                            // var x, y interface{}                Val(fmt.Ref("Println")).                /**/ Val(ctxRef(pkg, "a")).Val(ctxRef(pkg, "b")).Val(ctxRef(pkg, "c")). // fmt.Println(a, b, c)                /**/ Call(3).EndStmt().                NewClosure(gox.NewTuple(v), nil, false).BodyStart(pkg).                /**/ Val(fmt.Ref("Println")).Val(v).Call(1).EndStmt(). // fmt.Println(v)                /**/ End().                Val("Hello").Call(1).EndStmt(). // func(v string) { ... } ("Hello")                End()         pkg.WriteTo(os.Stdout)}

生成的代码如下:

package main import fmt "fmt" func main() {        a, b := "Hi", 3        var c = b        var x, y interface {        }        fmt.Println(a, b, c)        func(v string) {                fmt.Println(v)        }("Hello")}

 项目地址:GitHub - goplus/gox: Code generator for the Go languageCode generator for the Go language. Contribute to goplus/gox development by creating an account on GitHub.https://github.com/goplus/gox


原网址: 访问
创建于: 2022-08-17 00:41:56
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论