Skip to content

Instantly share code, notes, and snippets.

@mikefrey
Created May 3, 2017 00:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikefrey/e34feceeaae48c3e219dd67aef96cff8 to your computer and use it in GitHub Desktop.
Save mikefrey/e34feceeaae48c3e219dd67aef96cff8 to your computer and use it in GitHub Desktop.
Generate a `map[string]string` from sql files using `go generate`
// +build ignore
package main
import (
"io/ioutil"
"log"
"os"
"path/filepath"
"strconv"
"strings"
"text/template"
)
const fileTemplate = `//DO NOT EDIT - GENERATED USING go generate
package db
sqlFiles := map[string]string{
{{range $key, $val := .Files}}
"{{$key}}": {{$val}},
{{end}}
}
`
func main() {
files, err := loadFiles("db/sql")
handleError(err)
ctx := struct{ Files map[string]string }{Files: files}
tmpl, err := template.New("tmpl").Parse(fileTemplate)
handleError(err)
f, err := os.Create("db/sql_files.go")
handleError(err)
err = tmpl.Execute(f, ctx)
handleError(err)
}
func loadFiles(path string) (map[string]string, error) {
pattern := filepath.Join(path, "./*.sql")
files, err := filepath.Glob(pattern)
if err != nil {
return nil, err
}
stmts := make(map[string]string)
for _, file := range files {
b, err := ioutil.ReadFile(file)
if err != nil {
return nil, err
}
name := strings.TrimSuffix(filepath.Base(file), filepath.Ext(file))
sql := string(b)
stmts[name] = strconv.Quote(sql)
}
return stmts, nil
}
func handleError(err error) {
if err != nil {
log.Fatalf("%v", err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment