首頁  >  文章  >  後端開發  >  如何使用 Go 模板、Switch-Case 語句和 YAML 資料產生自訂 Bash 腳本?

如何使用 Go 模板、Switch-Case 語句和 YAML 資料產生自訂 Bash 腳本?

Barbara Streisand
Barbara Streisand原創
2024-10-29 04:18:29231瀏覽

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 值並列印所需的指令。

預設處理未明確定義的類型。

結果:
<code class="bash">#!/bin/bash

echo "type is runner"
Submitting api1


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

此代碼生成的示例bash 腳本為:

  • 其他注意事項:
  • 範例YAML 資料硬編碼在data 變數中。在現實場景中,可以從檔案或資料庫載入。
API 映射(從類型到命令)可以實現為映射或單獨的配置文件,以提高靈活性。 依賴結構中的 cwd 和 Install 欄位在此解決方案中未使用,因為示範不需要它們。

以上是如何使用 Go 模板、Switch-Case 語句和 YAML 資料產生自訂 Bash 腳本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn