検索
ホームページバックエンド開発GolangSwitch および ForEach で Go テンプレートを使用して、依存関係タイプ固有のコマンドを含む Bash スクリプトを生成する方法

How to Use Go Template with Switch and ForEach to Generate Bash Scripts with Dependency Type Specific Commands?

Switch と ForEach を使用した Golang テンプレート

背景:

タスクは、 switchForEach の両方の構造を組み込んだ 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>

更新されたコードにより、期待されるスクリプトが生成されます:

要約解決策には、テンプレートを正しく使用して依存関係データにアクセスし、

switch
<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>

ForEach を使用してタイプに基づいて適切なコマンドを生成することが含まれます。

以上がSwitch および ForEach で Go テンプレートを使用して、依存関係タイプ固有のコマンドを含む Bash スクリプトを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Go Binary Encoding/Decoding:「エンコード/バイナリ」パッケージを使用してくださいGo Binary Encoding/Decoding:「エンコード/バイナリ」パッケージを使用してくださいMay 08, 2025 am 12:13 AM

GOは、バイナリエンコードとデコードに「エンコード/バイナリ」パッケージを使用します。 1)このパッケージは、binary.writeとbinary.read関数を作成して、データを書き込み、読み取ります。 2)正しいエンディアン(BigendianやLittleendianなど)の選択に注意してください。 3)データのアラインメントとエラー処理も重要です。データの正確性とパフォーマンスを確保します。

GO:標準の「バイト」パッケージを使用したバイトスライス操作GO:標準の「バイト」パッケージを使用したバイトスライス操作May 08, 2025 am 12:09 AM

「バイト」パッケージを包装してください

エンコード/バイナリパッケージに移動:バイナリ操作のパフォーマンスの最適化エンコード/バイナリパッケージに移動:バイナリ操作のパフォーマンスの最適化May 08, 2025 am 12:06 AM

Encoding/binaryPackageIngoiseffictevectiveforptimizingdueToitssuportforendiannessandannessandAhandling.toenhanceperformance:1)usebinary.native.nativedianfornatiannesstoavoidbyteswapping.2)batchedandandandwriteTerationtoredutei/ober

BYTESパッケージに移動:短いリファレンスとヒントBYTESパッケージに移動:短いリファレンスとヒントMay 08, 2025 am 12:05 AM

GOのBYTESパッケージは、主にバイトスライスを効率的に処理するために使用されます。 1)bytes.bufferを使用すると、弦のスプライシングを効率的に実行して、不必要なメモリの割り当てを避けます。 2)バイト機能を使用して、バイトスライスをすばやく比較します。 3)bytes.index、bytes.split、bytes.replaceall関数は、バイトスライスの検索と操作に使用できますが、パフォーマンスの問題に注意する必要があります。

BYTESパッケージに移動:バイトスライス操作の実用的な例BYTESパッケージに移動:バイトスライス操作の実用的な例May 08, 2025 am 12:01 AM

バイトパッケージは、バイトスライスを効率的に処理するためのさまざまな機能を提供します。 1)bytes.containsを使用して、バイトシーケンスを確認します。 2)bytes.splitを使用してバイトスライスを分割します。 3)バイトシーケンスバイトを交換します。 4)bytes.joinを使用して、複数のバイトスライスを接続します。 5)bytes.bufferを使用してデータを作成します。 6)エラー処理とデータ検証のためのBYTES.MAPの組み合わせ。

バイナリエンコード/デコードに移動:例を備えた実用的なガイドバイナリエンコード/デコードに移動:例を備えた実用的なガイドMay 07, 2025 pm 05:37 PM

GOのエンコード/バイナリパッケージは、バイナリデータを処理するためのツールです。 1)小エンディアンおよび大規模なエンディアンバイト順序をサポートし、ネットワークプロトコルとファイル形式で使用できます。 2)複雑な構造のエンコードとデコードは、読み取りおよび書き込み関数を介して処理できます。 3)特に異なるシステム間でデータが送信される場合、それを使用するときに、バイトの順序とデータ型の一貫性に注意してください。このパッケージは、バイナリデータの効率的な処理に適していますが、バイトスライスと長さを慎重に管理する必要があります。

「バイト」パッケージ:比較、結合、分割など「バイト」パッケージ:比較、結合、分割などMay 07, 2025 pm 05:29 PM

「バイト」パッケージを積極的に使用してください

Go Stringsパッケージ:知る必要がある必須関数Go Stringsパッケージ:知る必要がある必須関数May 07, 2025 pm 04:57 PM

go'sstringspackageincludesentionsentionslikecontains、trimspace、split、andreplaceall.1)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境