首頁 >後端開發 >Golang >如何使用 Go 模板與 Switch 和 ForEach 來產生具有依賴類型特定命令的 Bash 腳本?

如何使用 Go 模板與 Switch 和 ForEach 來產生具有依賴類型特定命令的 Bash 腳本?

DDD
DDD原創
2024-10-29 09:50:02369瀏覽

How to Use Go Template with Switch and ForEach to Generate Bash Scripts with Dependency Type Specific Commands?

帶有Switch 和ForEach 的Golang 模板

背景:

任務是一個生成🎜>背景:任務是一個生成來自Go 程式的bash.sh 文件,包含switch

ForEach 結構。生成的腳本應該迭代依賴項列表,訪問它們的類型並使用這些類型來列印特定訊息。

問題:

使用 YAML 編組和的初步嘗試模板解析導致功能不正確。出現此問題的原因是範本中未正確使用依賴項類型。

解決方案:為了解決該問題,依賴項結構已修改為包含Install 欄位表示要為每種類型執行的命令。然後建立一個模板來迭代 Dependency 數組,並使用 range

switch

構造根據類型列印命令。
<code class="go">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
    CWD     string
    Install map[string]string
}

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

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

`

func main() {
    f := File{}

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

   const t = `
#!/bin/bash

{{range .Dependency}}
echo "type is {{.Type}}"
echo "cwd is {{.CWD}}"
{{range $installName, $installCmd := .Install}}
echo "install {{$installName}} ({{$installCmd}})"
{{end}}
{{end}}
`

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

以下程式碼片段說明了修改後的方法:

輸出:

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

echo "type is runner"
echo "cwd is /ui"
echo "install api (echo api1)"
echo "type is runner2"
echo "cwd is /ui2"
echo "install api (echo api2)"</code>

更新的程式碼產生預期的腳本:更新的程式碼產生預期的腳本:

總結,解決方案涉及正確使用模板訪問依賴項數據,並使用switch 和ForEach. 根據類型生成適當的命令

以上是如何使用 Go 模板與 Switch 和 ForEach 來產生具有依賴類型特定命令的 Bash 腳本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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