Текстовый шаблон не работает с некоторыми словами - PullRequest
0 голосов
/ 15 марта 2019

Я создаю CLI для генерации кода для самодельной структуры API (прямо сейчас, чтобы сгенерировать часть контроллера). Для этого я использую шаблон, но я увидел, что шаблон ничего не генерирует (пустой файл), когда я использую в шаблоне такие слова, как package или func.

Я хочу построить следующий шаблон:

package controllers

{{- range .Methods }}
    {{ if eq .Name "Create" }}
            func ({{ firstChar $.ModelName }}c {{ title $.ModelName }}Controller) Get{{ title $.ModelName }}(c *gin.Context) {
                {{ $.ModelName }}, err := store.Find{{ title $.ModelName }}ById(c, c.Param("id"))

                if err != nil {
                    c.AbortWithError(http.StatusNotFound, helpers.ErrorWithCode("{{ $.ModelName }}_not_found", "The {{ $.ModelName }} does not exist", err))
                    return
                }

                c.JSON(http.StatusOK, {{ $.ModelName }})
            }
    {{ else if eq .Name "Get" }}
    {{ else if eq .Name "GetAll" }}
    {{ else if eq .Name "Update" }}
    {{ else if eq .Name "Delete" }}
    {{ end }}
{{- end }}

Есть ли у вас идеи, как заставить работать шаблон?

1 Ответ

0 голосов
/ 15 марта 2019

Теперь это работает, я просто добавляю template.Must перед template.New, и теперь оно работает как шарм.

path := filepath.Join("templates", "controller.tmpl")
    body, _ := ioutil.ReadFile(path)
    tmpl := template.Must(template.New("model").Funcs(funcMap).Parse(string(body)))

    var buf bytes.Buffer
    err := tmpl.Execute(&buf, selectedMethods)
    utils.Check(err)

    src, _ := format.Source(buf.Bytes())
...