【发布时间】: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