Code Generation and Embedding
Overview
go generate runs commands to generate code, and //go:embed embeds files into binaries.
go generate
//go:generate stringer -type=Status
type Status int
const (
Pending Status = iota
Approved
Rejected
)go generate ./...Common Generators
stringer- String methods for enumsmockgen- Mock interfaces for testingprotoc- Protocol buffer code
Embedding Files
import "embed"
//go:embed config.json
var configData []byte
//go:embed templates/*
var templates embed.FS
//go:embed static
var staticFiles embed.FSReading Embedded Files
//go:embed data.txt
var data string // As string
//go:embed data.bin
var data []byte // As bytes
//go:embed files/*
var fs embed.FS // As filesystem
content, _ := fs.ReadFile("files/config.json")HTTP File Server
//go:embed static/*
var static embed.FS
func main() {
fs := http.FileServer(http.FS(static))
http.Handle("/static/", fs)
http.ListenAndServe(":8080", nil)
}Templates
//go:embed templates/*.html
var templates embed.FS
tmpl := template.Must(template.ParseFS(templates, "templates/*.html"))Summary
| Directive | Purpose |
|---|---|
//go:generate cmd |
Run code generator |
//go:embed file |
Embed as string/bytes |
//go:embed dir/* |
Embed as filesystem |