package
0.0.0-20170114144732-49e46f211e5d
Repository: https://github.com/quentinperez/go-stuff.git
Documentation: pkg.go.dev
# README
Bindata-generate
How to generate golang code with go generate and go-bindata
-
We will create a generator of class which implements the
stringer
interface. -
First, we need to generate the
resource.go
withgo-bindata
andstringer.tmpl
$> cat templates/stringer.tmpl
package {{ .PackageName }}
import "fmt"
func ({{ .Object }} {{ .Type }}) String() string {
return "{{ .Type }}"
}
$> go-bindata -o resource.go templates/stringer.tmpl
- Then, the
main.go
file which generates a new file with the template
package main
import (
"flag"
"fmt"
"os"
"text/template"
"github.com/Sirupsen/logrus"
)
type GenObject struct {
Object string
PackageName string
Type string
}
func main() {
Name := flag.String("name", "", "Object Name")
flag.Parse()
if *Name == "" {
flag.Usage()
return
}
resource, err := Asset("templates/stringer.tmpl")
if err != nil {
logrus.Fatal(err)
}
tmpl, err := template.New("template").Parse(string(resource))
if err != nil {
logrus.Fatal(err)
}
fileName := fmt.Sprintf("%v.go", *Name)
file, err := os.OpenFile(fileName, os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0600)
if err != nil {
logrus.Fatal(err)
}
if err := tmpl.Execute(file, GenObject{Object: string((*Name)[0]), PackageName: "stringer", Type: *Name}); err != nil {
logrus.Fatal(err)
}
}
- Now, we will install the
bindata-generate
command
$> go install
- To finish, we will use
go generate
with the test files
$> cd test
$> cat generate.go
package generate
//go:generate bindata-generate -name hello
//go:generate bindata-generate -name world
$> go generate