带有 Switch 和 ForEach 的 Golang 模板
构建需要动态命令的 bash 脚本时,可以将 Golang 模板与 Switch 和 ForEach 结合使用
依赖结构
考虑一个包含类型信息的依赖结构:
type Dependency struct { Name string Type string CWD string Install []Install }
Bash 脚本模板
接下来,为 bash 脚本创建模板:
#!/bin/bash {{range $d := .Dependency}} echo "type is {{$d.Type}}" echo "cwd is {{$d.CWD}}" {{range $i := $d.Install}} echo "install {{$i.name}}" {{end}} {{end}}
模板执行
使用模板生成脚本:
package main import ( "log" "text/template" "gopkg.in/yaml.v2" "os" ) // ... (rest of the code unchanged) func main() { // ... (rest of the code unchanged) const t = ` #!/bin/bash {{range .Dependency}} echo "type is {{.Type}}" echo "cwd is {{.CWD}}" {{range .Install}} echo "install {{.name}}" {{end}} {{end}} ` tt := template.Must(template.New("").Parse(t)) err = tt.Execute(os.Stdout, f) if err != nil { log.Println("executing template:", err) } }
输出
运行 go run main.go 将生成所需的 bash 脚本:
#!/bin/bash echo "type is runner" echo "cwd is /ui" echo "install api" echo "type is runner2" echo "cwd is /ui2" echo "install api2"
增强
为了获得更大的灵活性,请考虑将安装步骤存储在单独的映射中,并根据依赖项类型对其进行插值。这分离了数据所有权并允许更动态的脚本生成。
以上是如何使用 Golang 模板生成带有 switch 语句和 ForEach 循环的动态 bash 脚本?的详细内容。更多信息请关注PHP中文网其他相关文章!