Profile
Back to NewsBack
GitHub Trending 2 min
Reader Mode
goplus/gogen: Code generator for the Go language

goplus/gogen: Code generator for the Go language

16 hours ago

gogen - Code generator for the Go language ========

Build Status</a> GitHub release</a> Coverage Status</a> GoDoc</a>

gogen is a general-purpose Go code generation toolkit with zero third-party dependencies. Like the Go compiler, It can perform type checking of expressions. For example, if you generate an expression like "Hello" + 1, it will report the corresponding error.

Quick start

Create a file named hellogen.go, like below:

package main

import ( "go/token" "go/types" "os"

"github.com/goplus/gogen" )

func main() { pkg := gogen.NewPackage("", "main", nil) fmt := pkg.Import("fmt") v := pkg.NewParam(token.NoPos, "v", types.Typ[types.String], false) // 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").VarVal("b").EndInit(1). // var c = b NewVar(gogen.TyAny, "x", "y"). // var x, y any Val(fmt.Ref("Println")). /**/ VarVal("a").VarVal("b").VarVal("c"). // fmt.Println(a, b, c) /**/ Call(3).EndStmt(). NewClosure(types.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) }

Try it like:

go mod init hello
go mod tidy
go run hellogen.go

This will dump Go source code to stdout. The following is the output content:

package main

import "fmt"

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

Chat with me