>  기사  >  백엔드 개발  >  Go 템플릿, Switch-Case 문 및 YAML 데이터를 사용하여 사용자 정의 Bash 스크립트를 생성하는 방법은 무엇입니까?

Go 템플릿, Switch-Case 문 및 YAML 데이터를 사용하여 사용자 정의 Bash 스크립트를 생성하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-29 04:18:29243검색

How to Generate a Customized Bash Script Using Go Templates, Switch-Case Statements, and YAML Data?

Switch 및 ForEach가 포함된 Golang 템플릿

문제: Golang 프로그램에서 종속성 목록을 반복하고 해당 종속성을 확인하는 bash 스크립트를 구성합니다. switch-case 문을 사용하여 해당 유형에 따라 사용자 정의된 명령을 입력하고 인쇄합니다.

답변:

다음 업데이트된 Golang 코드는 원하는 동작을 수행합니다.

<code class="go">package main

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
}

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 "runner1":
    echo "Submitting api1"
  case "runner2":
    echo "Submitting api2"
  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>

설명:

  • 코드는 텍스트/템플릿을 사용하여 출력 문자열의 형식을 지정합니다.
  • range 키워드는 종속성 배열을 반복합니다.
  • 루프 내에서 스위치-케이스 블록은 종속성의 유형에 따라 출력을 사용자 정의하는 데 사용됩니다.
  • case 문은 특정 유형 값을 처리하고 원하는 명령을 인쇄합니다.
  • 기본 사례는 구체적으로 정의되지 않은 유형을 처리합니다.

결과:

이 코드로 생성된 예시 bash 스크립트는 다음과 같습니다.

<code class="bash">#!/bin/bash

echo "type is runner"
Submitting api1


echo "type is runner2"
Submitting api2</code>

추가 고려 사항:

  • 예제 YAML 데이터는 데이터 변수에 하드 코딩되어 있습니다. 실제 시나리오에서는 파일이나 데이터베이스에서 로드할 수 있습니다.
  • 유연성 향상을 위해 유형에서 명령으로의 API 매핑을 맵이나 별도의 구성 파일로 구현할 수 있습니다.
  • Dependency 구조체의 cwd 및 Install 필드는 데모에 필요하지 않았기 때문에 이 솔루션에서는 사용되지 않습니다.

위 내용은 Go 템플릿, Switch-Case 문 및 YAML 데이터를 사용하여 사용자 정의 Bash 스크립트를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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