首页 > 后端开发 > Golang > 如何使用带有 switch 和 ForEach 的 Go 模板生成 Bash 脚本,以迭代依赖项并根据其类型输出相应的回显消息?

如何使用带有 switch 和 ForEach 的 Go 模板生成 Bash 脚本,以迭代依赖项并根据其类型输出相应的回显消息?

Susan Sarandon
发布: 2024-10-29 08:22:02
原创
465 人浏览过

How can I generate a Bash script using Go templates with switch and ForEach to iterate through dependencies and output corresponding echo messages based on their type?

带有 Switch 和 ForEach 的 Golang 模板

此代码演示重点介绍如何使用 Go 中的模板来生成 bash 脚本。该脚本需要 ForEach 通过依赖关系进行迭代,识别它们的类型,并输出相应的回显消息。实现了 switch 语句来处理每个依赖项的类型。

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
    CWD     string
    Install []Install
}

type Install map[string]string

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}}"
echo "cwd is {{.CWD}}"
{{range .Install}}
echo "install {{.name}}"
{{end}}
{{end}}
`

    tt := template.Must(template.New("").Parse(t))
    err = tt.Execute(os.Stdout, f)
    if err != nil {
        log.Println("executing template:", err)
    }
}
登录后复制

提供的数据被解组到 File 结构中,然后准备模板执行。此修改后的代码生成一个脚本:

#!/bin/bash

echo "type is runner"
echo "cwd is /ui"
echo "install api"

echo "type is runner2"
echo "cwd is /ui2"
echo "install api2"
登录后复制

以上是如何使用带有 switch 和 ForEach 的 Go 模板生成 Bash 脚本,以迭代依赖项并根据其类型输出相应的回显消息?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板