package main import ( "bytes" "fmt" "os" "strings" "text/template" ) var TMPL = strings.Trim(` {{- /* []string expected */}} {{- define "sasakuna"}} {{- range $i, $text := . }} {{$i}}: {{$text}} {{- end }} {{- end }} `, "\n") func main() { inlineTemplate := generateInlineTemplates( []string{ TMPL, }) tmpl := template.New("") tmpl = template.Must(tmpl.Parse(`{{ call .InlineTemplate .Name .Data}}`)) tmpl.Execute(os.Stdout, struct { Name string Data []string InlineTemplate func(string, any) string }{ Name: "sasakuna", Data: []string{"sasa", "kuna"}, InlineTemplate: inlineTemplate, }) // Output: // 0: sasa // 1: kuna } func generateInlineTemplates( definitions []string, ) func(string, any) string { templates := template.New("") for _, def := range definitions { templates = template.Must(templates.Parse(def)) } return func(name string, param any) string { buf := bytes.NewBuffer([]byte{}) tmpl := template.Must(templates.Parse(fmt.Sprintf(`{{template "%s" .}}`, name))) if err := tmpl.Execute(buf, param); err != nil { panic(err) } return buf.String() } }