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