Switch 및 ForEach가 포함된 Golang 템플릿
배경:
작업은 switch 및 ForEach 구문을 모두 통합하는 Go 프로그램의 bash.sh 파일입니다. 생성된 스크립트는 종속성 목록을 반복하여 해당 유형에 액세스하고 해당 유형을 사용하여 특정 메시지를 인쇄해야 합니다.
문제:
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를 사용하여 유형에 따라 적절한 명령을 생성하는 것입니다.
위 내용은 Switch 및 ForEach와 함께 Go 템플릿을 사용하여 종속성 유형별 명령으로 Bash 스크립트를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!