如何使用 Go 模板与 Switch 和 ForEach 来生成具有依赖类型特定命令的 Bash 脚本?
Oct 29, 2024 am 09:50 AM带有 Switch 和 ForEach 的 Golang 模板
背景:
任务是生成一个来自 Go 程序的 bash.sh 文件,包含 switch 和 ForEach 结构。生成的脚本应该迭代依赖项列表,访问它们的类型并使用这些类型来打印特定消息。
问题:
使用 YAML 编组和的初步尝试模板解析导致功能不正确。出现此问题的原因是模板中未正确使用依赖项类型。
解决方案:
为了解决该问题,依赖项结构已修改为包含 Install 字段表示要为每种类型执行的命令。然后创建一个模板来迭代 Dependency 数组,并使用 range 和 switch 构造根据类型打印命令。
以下代码片段说明了修改后的方法:
<code class="go">import ( "log" "text/template" "gopkg.in/yaml.v2" "os" ) type File struct { TypeVersion string `yaml:"_type-version"` Dependency []Dependency } type Dependency struct { Name string Type string CWD string Install map[string]string } var data = ` _type-version: "1.0.0" dependency: - name: ui type: runner cwd: /ui install: api: echo api1 - name: ui2 type: runner2 cwd: /ui2 install: api: echo api2 ` func main() { f := File{} err := yaml.Unmarshal([]byte(data), &amp;f) if err != nil { log.Fatalf("error: %v", err) } const t = ` #!/bin/bash {{range .Dependency}} echo "type is {{.Type}}" echo "cwd is {{.CWD}}" {{range $installName, $installCmd := .Install}} echo "install {{$installName}} ({{$installCmd}})" {{end}} {{end}} ` tt := template.Must(template.New("").Parse(t)) err = tt.Execute(os.Stdout, f) if err != nil { log.Println("executing template:", err) } }</code>
登录后复制
输出:
更新的代码生成预期的脚本:
<code class="sh">#!/bin/bash echo "type is runner" echo "cwd is /ui" echo "install api (echo api1)" echo "type is runner2" echo "cwd is /ui2" echo "install api (echo api2)"</code>
登录后复制
总结,解决方案涉及正确使用模板访问依赖项数据,并使用 switch 和 ForEach.
根据类型生成适当的命令以上是如何使用 Go 模板与 Switch 和 ForEach 来生成具有依赖类型特定命令的 Bash 脚本?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)