golang基于模板运行命令和生成文件的插件库Orbit的使用
Golang基于模板运行命令和生成文件的插件库Orbit的使用
Orbit简介
Orbit是一个跨平台的任务运行器,用于从模板执行命令和生成文件。它提供了比传统make和sed命令更优雅的跨平台解决方案。
安装
从最新版本下载Orbit,支持多种操作系统和架构。
Linux/MacOS安装:
tar -xzf orbit*.tar.gz orbit
sudo mv ./orbit /usr/local/bin && chmod +x /usr/local/bin/orbit
Windows安装:
- 右键点击文件选择"全部解压"
- 将二进制文件移动到如
C:\Orbit
的文件夹 - 将文件夹添加到系统环境变量Path中
验证安装:
orbit version
从模板生成文件
Orbit使用Go的text/template
包作为模板引擎,并提供了Sprig库和三个自定义函数:
os
- 返回当前操作系统名称verbose
- 如果日志级别为info则返回truedebug
- 如果日志级别为debug则返回true
基本命令
orbit generate [flags]
主要参数
-f --file
- 模板文件路径(必需)-o --output
- 输出文件路径-p --payload
- 数据源,格式为"key,value"-t --templates
- 附加模板文件--delimiters
- 自定义模板分隔符-v --verbose
- 设置日志级别为info-d --debug
- 设置日志级别为debug
完整示例
模板文件(template.yml):
companies:
{{- range $company := .Orbit.Values.companies }}
- name: {{ $company.name }}
launchers:
{{- range $launcher := $company.launchers }}
- {{ $launcher }}
{{ end }}
{{- end }}
数据源文件(data-source.yml):
companies:
- name: SpaceX
launchers:
- Falcon 9
- Falcon Heavy
- name: Blue Origin
launchers:
- New Shepard
- New Glenn
agencies:
- name: ESA
launchers:
- Ariane 5
- Vega
生成命令:
orbit generate -f template.yml -p "Values,data-source.yml" -o companies.yml
输出文件(companies.yml):
companies:
- name: SpaceX
launchers:
- Falcon 9
- Falcon Heavy
- name: Blue Origin
launchers:
- New Shepard
- New Glenn
定义和运行任务
Orbit可以像make一样定义和运行任务。
基本命令
orbit run [tasks] [flags]
任务配置文件(orbit.yml)示例:
tasks:
- use: prepare
run:
- orbit generate -f configuration.template.yml -o configuration.yml -p "Data,config.json"
- echo "configuration.yml has been succesfully created!"
运行任务:
orbit run prepare
高级任务示例:
tasks:
- use: task
run:
- {{ run "subtask_1" "subtask_2" }}
- use: subtask_1
run:
- command [args]
- use: subtask_2
run:
- command [args]
平台特定任务示例:
tasks:
- use: script
run:
{{ if ne "windows" os }}
- my_script.sh
{{ else }}
- .\my_script.bat
{{ end }}
Orbit会自动检测您使用的shell(在POSIX系统上使用SHELL环境变量,在Windows上使用COMSPEC)。
更多关于golang基于模板运行命令和生成文件的插件库Orbit的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang基于模板运行命令和生成文件的插件库Orbit的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Orbit - Golang模板化命令执行与文件生成库
Orbit 是一个用于基于模板运行命令和生成文件的 Go 库,它提供了一种灵活的方式来执行模板化的命令操作和文件生成。下面我将介绍 Orbit 的基本用法和示例代码。
安装 Orbit
go get github.com/gsoc2/orbit
基本概念
Orbit 主要提供两种功能:
- 基于模板执行命令
- 基于模板生成文件
示例代码
1. 基于模板执行命令
package main
import (
"fmt"
"log"
"os"
"github.com/gsoc2/orbit"
)
func main() {
// 创建新的 Orbit 实例
o := orbit.New()
// 定义模板数据
data := map[string]interface{}{
"Name": "Alice",
"Age": 30,
"Action": "greet",
}
// 定义命令模板
command := `echo "Hello {{.Name}}, you are {{.Age}} years old. This is a {{.Action}}."`
// 执行模板化命令
output, err := o.ExecuteCommand(command, data)
if err != nil {
log.Fatalf("Failed to execute command: %v", err)
}
fmt.Println("Command output:", output)
}
2. 基于模板生成文件
package main
import (
"fmt"
"log"
"os"
"github.com/gsoc2/orbit"
)
func main() {
// 创建新的 Orbit 实例
o := orbit.New()
// 定义模板数据
data := map[string]interface{}{
"Name": "Bob",
"Version": "1.0.0",
}
// 定义文件模板
fileTemplate := `# Welcome to {{.Name}}'s Project
Version: {{.Version}}
This file was generated automatically by Orbit.
`
// 生成文件
err := o.GenerateFile("welcome.md", fileTemplate, data, 0644)
if err != nil {
log.Fatalf("Failed to generate file: %v", err)
}
fmt.Println("File generated successfully!")
}
3. 从文件加载模板
package main
import (
"fmt"
"log"
"github.com/gsoc2/orbit"
)
func main() {
o := orbit.New()
data := map[string]interface{}{
"ProjectName": "Orbit Demo",
"Author": "John Doe",
}
// 从文件加载模板并执行命令
output, err := o.ExecuteCommandFromFile("command.tmpl", data)
if err != nil {
log.Fatalf("Error executing command from template: %v", err)
}
fmt.Println("Command output:", output)
// 从文件加载模板并生成文件
err = o.GenerateFileFromTemplate("output.txt", "template.tmpl", data, 0644)
if err != nil {
log.Fatalf("Error generating file from template: %v", err)
}
fmt.Println("File generated from template successfully!")
}
高级功能
自定义模板函数
package main
import (
"fmt"
"log"
"strings"
"github.com/gsoc2/orbit"
)
func main() {
o := orbit.New()
// 添加自定义模板函数
o.AddTemplateFunc("toUpper", strings.ToUpper)
o.AddTemplateFunc("toLower", strings.ToLower)
data := map[string]interface{}{
"Message": "Hello World",
}
command := `echo "{{toUpper .Message}} and {{toLower .Message}}"`
output, err := o.ExecuteCommand(command, data)
if err != nil {
log.Fatal(err)
}
fmt.Println(output)
}
批量处理
package main
import (
"fmt"
"log"
"github.com/gsoc2/orbit"
)
func main() {
o := orbit.New()
items := []map[string]interface{}{
{"Name": "Item1", "Value": 100},
{"Name": "Item2", "Value": 200},
{"Name": "Item3", "Value": 300},
}
for _, item := range items {
output, err := o.ExecuteCommand(`echo "Processing {{.Name}} with value {{.Value}}"`, item)
if err != nil {
log.Printf("Error processing %s: %v", item["Name"], err)
continue
}
fmt.Println(output)
}
}
最佳实践
- 模板管理:将常用模板存储在文件中,便于维护和重用
- 错误处理:始终检查命令执行和文件生成的错误
- 安全考虑:当处理用户提供的模板数据时,注意防范注入攻击
- 日志记录:记录重要的模板渲染和命令执行操作
Orbit 提供了一种简洁的方式来处理模板化的命令执行和文件生成,特别适合需要动态生成配置或执行命令的自动化工具开发。