【问题标题】:How to update a go template while still persisting the original template variables如何在保留原始模板变量的同时更新 go 模板
【发布时间】:2019-08-07 08:22:57
【问题描述】:

这是一个高级问题,因为我不知道如何解决这个问题:

我正在构建一个自动为用户设置代码项目的 CLI。

我想创建一个update 功能,允许用户更新到最新的 CLI 模板版本,但仍保留他们用于创建项目的原始变量(即项目名称、环境变量等...)

我知道如何创建新模板,但我不知道如何更新并仍然保留用户传递的变量。

这将类似于 git 合并,因此将用户的本地项目与更新的 CLI 模板合并。

在下面的代码中,您可以看到如何使用 var deploymentYamlData 作为字符串变量来模板化文件的示例

我有一个函数可以将所有这些文件模板组织到项目的正确目录结构中。

如何将目录模板与用户的本地目录合并,同时能够保留原始模板变量?

如果我需要澄清更多,请提前道歉。

package main

import (
    "text/template"
        "os"
)

var deploymentYamlData = `---

  # do not edit commented lines
  # CLI-Version: {{ .GitTagVersion}}

  app: {{ .BotName }}
  type: web
  team: {{ .TeamName }}
  docker_image: {{ .DockerImageName }}
  docker_tag: {{ .TagVersion }}
  internal: false
  replicas: {{ .Replicas }}
  revisionHistoryLimit: 5
  container_port: {{ .DockerImagePort }}
   healthcheck:
    path: /{{ .DockerImageHealthCheck }}
  dynamodb:
    enable_deleteitem: true
    tables:
      - name: {{ .BotName }}_conversation_data
`

type DigitalAssistant struct {
    BotName string
    TeamName string
    DockerImageName string
    TagVersion string
    Replicas int
    DockerImagePort int
    DockerImageHealthCheck string
        GitTageVersion string

}

func main() {
    bot := DigitalAssistant{"bobisyouruncle", "teamAwesome", "awesomebotimagename", "0.1.0", 1, 8000, "health"}
    bmap, err := template.New("captain.tmpl").Parse(deploymentYamlData)
    if err != nil { panic(err) }
    err = bmap.Execute(os.Stdout, bot)
    if err != nil { panic(err) }
}

【问题讨论】:

  • 你不能,你需要将提供的变量保存在某个地方(例如,可能是生成的文件旁边的 JSON 文件),以便在重新执行模板时可以重新使用它们。一旦模板被执行,就没有要保留的变量——它只是原始文本。

标签: templates go command-line-interface


【解决方案1】:

有几种方法可以解决这个问题,但如果您使用 https://github.com/go-yaml/yaml 之类的模块而不是使用模板来生成和读取 YAML,则此往返会更容易。

另外,这个工具可以很容易地通过例子来制作结构类型:https://mengzhuo.github.io/yaml-to-go/

https://github.com/spf13/viper 中完成了一种不同的解析方法,如果您允许您不知道的字段,这可能会更有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多