首頁  >  文章  >  後端開發  >  如何使用 Golang 範本、switch 語句和 ForEach 迴圈根據依賴類型產生具有特定命令的 Bash 腳本?

如何使用 Golang 範本、switch 語句和 ForEach 迴圈根據依賴類型產生具有特定命令的 Bash 腳本?

Susan Sarandon
Susan Sarandon原創
2024-10-28 18:08:29442瀏覽

How do you generate a Bash script with specific commands based on dependency types using Golang template, switch statement, and ForEach loop?

使用Golang 模板、Switch 和ForEach 產生Bash 腳本

挑戰

挑戰

挑戰

<code class="go">package main

import (
    "log"
    "text/template"
    "gopkg.in/yaml.v2"
    "os"
)

type File struct {
    TypeVersion string        `yaml:"_type-version"`
    Dependency  []Dependency `yaml:"dependency"`
}

type Dependency struct {
    Name    string            `yaml:"name"`
    Type    string            `yaml:"type"`
    CWD     string            `yaml:"cwd"`
    Install map[string]string `yaml:"install"`
}

var data = `
_type-version: "1.0.0"
dependency:
  - name: ui
    type: runner
    cwd: /ui
    install:
       - name: api

  - name: ui2
    type: runner2
    cwd: /ui2
    install:
       - name: api2

`

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 "runner":
        echo "running command for runner"
    case "runner2":
        echo "running command for runner2"
    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>

挑戰

    挑戰
  1. 挑戰
  2. 實作

要實現這一點,我們可以使用Go 模板,提供了一種從結構化資料產生文字檔案的便捷方法。這是使用具有switch 和ForEach 的範本的解決方案:

說明

#!/bin/bash

type is runner
running command for runner
type is runner2
running command for runner2
我們使用YAML 檔案(資料)來定義依賴項及其型別.我們使用yaml.Unmarshal 將YAML 檔案解析為File 結構。 我們使用 text/template 定義一個模板 (t)。此範本包括一個用於迭代依賴項的 ForEach 迴圈和一個用於處理不同類型的 switch 語句。 我們使用 template.Parse 解析模板。 Parse 並使用 Execute 以 File 結構作為輸入來執行它。 這會根據依賴項類型產生帶有所需命令的 Bash 腳本。 輸出執行上述程式會產生以下輸出:

以上是如何使用 Golang 範本、switch 語句和 ForEach 迴圈根據依賴類型產生具有特定命令的 Bash 腳本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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