@jennyhilton конечно, рад поболтать дальше.
ужно создатьbash.sh файл из программы golang, который должен делать следующее:
СоздайтеДля каждого цикл на зависимости и читать тип и в соответствии с типом печатать различные эхо-сообщения (команды) мне нужно с ним работатьпереключатель наtype
зависимости от Голанга
например что-то вроде следующего
Для каждой записи зависимости добавьте сообщение типа echo
#!/bin/bash
for a in $(dependencies.type)
echo $runner //from type
done
то, что я сделал, это то, что не работает
Идея, что для типа зависимостей"Runner1"(см. значение свойства type в экземпляре структуры зависимости) Мне нужно запуститьнесколько команд и для"Runner2" Мне нужно бежатьнесколько разных командИ те команды (как echo api1 для runner1 и т. Д.) Выше должны быть записаны в bash.script, который мне нужно создать из шаблонаосновной пакет
import (
"fmt"
"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)
}
d, err := yaml.Marshal(&f)
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("--- t dump:\n%s\n\n", string(d))
wd, _ := os.Getwd()
newfile, err := os.Create(wd + "/" + "bash.sh") // Truncates if file already exists
if err != nil {
fmt.Errorf("Failed to create file: %s , %s", wd+"/"+"bash.sh", err)
}
fmt.Println(newfile)
const File = `
#!/bin/bash
{{.dependency}},
{{if .Type runner2}}
echo "type is runner2"
{{- else}}
echo "type is %S"
{{- end}}
{{end}}
`
t := template.Must(template.New("bash.sh").Parse(File))
for _, r := range f.Dependency {
err := t.Execute(os.Stdout, r)
if err != nil {
log.Println("executing template:", err)
}
}
}
Обновить
Например
допустим, у меня есть карта, подобная следующей, и структура зависимостей должна работать со структурой API, чтобы знать, какую команду выполнять для каждого значения типа
API := map[string]string {
{
“runner1” : “api1”,
},
{
“runner2” : “api2”,
}
}
Вот как должен выглядеть скрипт в конце
#bin/bash
// in context of dep1
echo runner1
submitting api1
// in context of dep2
echo runner2
submitting api2