>  기사  >  백엔드 개발  >  Golang 템플릿, 스위치 문 및 ForEach 루프를 사용하여 종속성 유형을 기반으로 특정 명령이 포함된 Bash 스크립트를 어떻게 생성합니까?

Golang 템플릿, 스위치 문 및 ForEach 루프를 사용하여 종속성 유형을 기반으로 특정 명령이 포함된 Bash 스크립트를 어떻게 생성합니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-28 18:08:29505검색

How do you generate a Bash script with specific commands based on dependency types using Golang template, switch statement, and ForEach loop?

Golang 템플릿, Switch 및 ForEach를 사용한 Bash 스크립트 생성

도전

목표 Golang 프로그램에서 Bash 스크립트를 만드는 것입니다. 스크립트는 종속성을 반복하고, 스위치 문을 사용하여 해당 유형을 식별하고, 유형에 따라 다른 명령을 에코해야 합니다.

구현

이를 달성하기 위해 다음을 사용할 수 있습니다. 구조화된 데이터에서 텍스트 파일을 생성하는 편리한 방법을 제공하는 Go 템플릿입니다. 다음은 스위치와 ForEach가 포함된 템플릿을 사용하는 솔루션입니다.

<code class="go">package main

import (
    "log"
    "text/template"
    "gopkg.in/yaml.v2"
    "os"
)

type File struct {
    TypeVersion string        `yaml:"_type-version"`
    Dependency  []Dependency `yaml:"dependency"`
}

type Dependency struct {
    Name    string            `yaml:"name"`
    Type    string            `yaml:"type"`
    CWD     string            `yaml:"cwd"`
    Install map[string]string `yaml:"install"`
}

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

  - name: ui2
    type: runner2
    cwd: /ui2
    install:
       - name: 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}}"
{{switch .Type}}
    case "runner":
        echo "running command for runner"
    case "runner2":
        echo "running command for runner2"
    default:
        echo "unknown type"
{{end}}
{{end}}
`

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

설명

  1. YAML 파일(데이터)을 사용하여 종속성과 해당 유형을 정의합니다. .
  2. yaml.Unmarshal을 사용하여 YAML 파일을 File 구조체로 구문 분석합니다.
  3. text/template을 사용하여 템플릿(t)을 정의합니다. 템플릿에는 종속성을 반복하는 ForEach 루프와 다양한 유형을 처리하는 스위치 문이 포함되어 있습니다.
  4. template.Parse를 사용하여 템플릿을 구문 분석하고 File 구조체를 입력으로 사용하여 Execute를 사용하여 실행합니다.
  5. 이것은 종속성 유형에 따라 원하는 명령으로 Bash 스크립트를 생성합니다.

출력

위 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.

#!/bin/bash

type is runner
running command for runner
type is runner2
running command for runner2

위 내용은 Golang 템플릿, 스위치 문 및 ForEach 루프를 사용하여 종속성 유형을 기반으로 특정 명령이 포함된 Bash 스크립트를 어떻게 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.