有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中文網其他相關文章!