golang并行化无依赖的Gherkin格式化插件ghokin的使用
Golang并行化无依赖的Gherkin格式化插件ghokin的使用
简介
Ghokin是一个用于格式化和转换Gherkin文件的工具,它支持并行处理且无外部依赖。
安装
- 下载适用于您架构的最新二进制文件
- 如果找不到适合您架构的二进制文件,可以安装Go工具链,克隆仓库并运行:
go install .
使用方式
基本命令
# 清理和/或转换Gherkin文件
ghokin [command]
可用命令:
check 检查文件/文件夹是否格式正确
fmt 格式化feature文件/文件夹
help 获取命令帮助
标志:
--config string 配置文件
-h, --help 显示帮助信息
⚠️ Ghokin仅适用于UTF-8
编码的文件,它会自动检测并转换非此字符集的文件。
fmt stdout命令
将stdin或feature文件格式化后输出到stdout
# 格式化文件并输出到stdout
ghokin fmt stdout features/test.feature
# 或通过管道
cat features/test.feature | ghokin fmt stdout
fmt replace命令
格式化并替换文件或目录中的所有文件
# 格式化并替换单个文件
ghokin fmt replace features/test.feature
# 格式化并替换目录中的所有文件
ghokin fmt replace features/
check命令
确保文件或目录中的所有文件格式正确,否则会以错误代码退出
# 检查单个文件
ghokin check features/test.feature
# 检查目录中的所有文件
ghokin check features/
配置
配置文件
默认配置使用2个空格缩进。可以通过在home目录或当前目录创建.ghokin.yml
文件来覆盖配置:
indent: 2
aliases:
json: "jq ."
环境变量
也可以使用环境变量代替静态配置文件:
export GHOKIN_INDENT=2
export GHOKIN_ALIASES='{"json":"jq ."}'
Shell命令集成
您可以在feature文件中使用shell命令来转换数据。首先需要在配置中定义别名,然后在要转换的行前一行使用该别名注释。
例如,假设@json
在后台调用jq
,我们可以在feature文件中这样验证和格式化json:
Feature: A Feature
Description
Scenario: A scenario to test
Given a thing
# @json
"""
{
"test": "test"
}
"""
贡献
如果您想为ghokin项目添加新功能,最佳方式是先创建一个issue,以明确如何在代码中实现您的更改。
开发设置
克隆仓库后,您需要安装依赖:
go mod vendor
要测试您的更改,可以运行:
make test-all
更多关于golang并行化无依赖的Gherkin格式化插件ghokin的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang并行化无依赖的Gherkin格式化插件ghokin的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用ghokin并行化格式化Gherkin文件
ghokin是一个用于格式化Gherkin文件的Go工具,它支持并行处理多个文件,特别适合在大型项目中快速格式化大量.feature文件。下面我将详细介绍如何使用ghokin以及如何利用其并行化特性。
安装ghokin
首先安装ghokin工具:
go install github.com/antham/ghokin/v3/cmd/ghokin@latest
基本使用
最简单的格式化命令:
ghokin file.feature
这会格式化指定的feature文件并输出到标准输出。
并行化处理多个文件
ghokin内置支持并行处理多个文件,这是其最大优势之一。使用方式:
ghokin file1.feature file2.feature file3.feature
或者使用通配符:
ghokin features/**/*.feature
ghokin会自动并行处理这些文件,无需额外配置。
在Go代码中使用ghokin
如果你想在自己的Go程序中集成ghokin的功能,可以使用其API:
package main
import (
"fmt"
"os"
"path/filepath"
"sync"
"github.com/antham/ghokin/v3/ghokin"
)
func main() {
// 创建ghokin实例
formatter := ghokin.NewFormatter()
// 获取要格式化的文件列表
files, err := filepath.Glob("features/**/*.feature")
if err != nil {
fmt.Printf("Error finding feature files: %v\n", err)
os.Exit(1)
}
// 使用WaitGroup等待所有goroutine完成
var wg sync.WaitGroup
for _, file := range files {
wg.Add(1)
go func(f string) {
defer wg.Done()
// 读取文件内容
content, err := os.ReadFile(f)
if err != nil {
fmt.Printf("Error reading %s: %v\n", f, err)
return
}
// 格式化内容
formatted, err := formatter.Format(string(content))
if err != nil {
fmt.Printf("Error formatting %s: %v\n", f, err)
return
}
// 写回文件
err = os.WriteFile(f, []byte(formatted), 0644)
if err != nil {
fmt.Printf("Error writing %s: %v\n", f, err)
return
}
fmt.Printf("Formatted %s\n", f)
}(file)
}
wg.Wait()
fmt.Println("All files formatted!")
}
高级选项
ghokin提供了一些格式化选项:
# 缩进使用空格而不是制表符
ghokin --space-indent file.feature
# 指定缩进大小(默认为2)
ghokin --indent 4 file.feature
# 在场景前保留空行
ghokin --keep-blank-lines-before-scenario file.feature
性能考虑
并行化处理时,ghokin会自动根据CPU核心数确定并行度。如果需要限制并发数,可以在代码中实现:
// 创建一个带缓冲的channel来控制并发数
sem := make(chan struct{}, runtime.NumCPU())
for _, file := range files {
wg.Add(1)
sem <- struct{}{} // 获取信号量
go func(f string) {
defer func() {
<-sem // 释放信号量
wg.Done()
}()
// 处理文件...
}(file)
}
总结
ghokin是一个高效的Gherkin格式化工具,主要特点包括:
- 原生支持并行处理多个文件
- 保持Gherkin语法结构不变
- 可配置的格式化选项
- 既可作为CLI工具也可作为库集成到Go项目中
对于大型BDD项目,使用ghokin可以显著提高.feature文件的格式化效率,保持代码风格一致。