首页  >  文章  >  后端开发  >  如何使用 Go 模板、Switch-Case 语句和 YAML 数据生成自定义 Bash 脚本?

如何使用 Go 模板、Switch-Case 语句和 YAML 数据生成自定义 Bash 脚本?

Barbara Streisand
Barbara Streisand原创
2024-10-29 04:18:29242浏览

How to Generate a Customized Bash Script Using Go Templates, Switch-Case Statements, and YAML Data?

带有 Switch 和 ForEach 的 Golang 模板

问题: 从 Golang 程序构造一个 bash 脚本,迭代依赖项列表,检查它们的依赖项类型,并使用 switch-case 语句根据这些类型打印自定义命令。

答案:

以下更新的 Golang 代码实现了所需的行为:

<code class="go">package main

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
}

func main() {
    f := File{}

    err := yaml.Unmarshal([]byte(data), &f)
    if err != nil {
        log.Fatalf("error: %v", err)
    }

    const t = `
#!/bin/bash
{{range .Dependency}}
echo "type is {{.Type}}"
{{switch .Type}}
  case "runner1":
    echo "Submitting api1"
  case "runner2":
    echo "Submitting api2"
  default:
    echo "Unknown type"
{{end}}
{{end}}
`

    tt := template.Must(template.New("").Parse(t))
    err = tt.Execute(os.Stdout, f)
    if err != nil {
        log.Println("executing template:", err)
    }
}</code>

说明:

  • 代码使用文本/模板来格式化输出字符串。
  • range 关键字迭代 Dependency 数组。
  • 在循环内部,使用 switch-case 块根据依赖项的类型自定义输出。
  • case 语句处理特定的 Type 值并打印所需的命令。
  • 默认情况处理未明确定义的类型。

结果:

此代码生成的示例 bash 脚本为:

<code class="bash">#!/bin/bash

echo "type is runner"
Submitting api1


echo "type is runner2"
Submitting api2</code>

其他注意事项:

  • 示例 YAML 数据硬编码在 data 变量中。在现实场景中,可以从文件或数据库加载。
  • API 映射(从类型到命令)可以实现为映射或单独的配置文件,以提高灵活性。
  • 依赖结构中的 cwd 和 Install 字段在此解决方案中未使用,因为演示不需要它们。

以上是如何使用 Go 模板、Switch-Case 语句和 YAML 数据生成自定义 Bash 脚本?的详细内容。更多信息请关注PHP中文网其他相关文章!

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