首頁  >  文章  >  後端開發  >  如何使用 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 腳本模板

接下來,為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