首页  >  文章  >  后端开发  >  如何使用 Golang 模板生成带有 switch 语句和 ForEach 循环的动态 bash 脚本?

如何使用 Golang 模板生成带有 switch 语句和 ForEach 循环的动态 bash 脚本?

DDD
DDD原创
2024-10-30 03:48:03604浏览

How can Golang templates be used to generate dynamic bash scripts with switch statements and ForEach loops?

带有 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn