golang跨平台配置文件验证工具插件库config-file-validator的使用
Golang跨平台配置文件验证工具插件库config-file-validator的使用
简介
Config File Validator是一个跨平台的CLI工具,用于验证不同类型的配置文件格式。
支持的配置文件格式
- Apple PList XML
- CSV
- EDITORCONFIG
- ENV
- HCL
- HOCON
- INI
- JSON
- Properties
- TOML
- XML
- YAML
安装
有几种安装config-file-validator工具的方法:
二进制发布版
从发布页面下载并解压。
使用Aqua安装
aqua g -i Boeing/config-file-validator
使用Scoop安装
scoop install config-file-validator
使用go install安装
go install github.com/Boeing/config-file-validator/cmd/validator@v1.8.0
使用示例
基本使用
如果省略搜索路径,它将搜索当前目录
validator /path/to/search
多个搜索路径
支持多个搜索路径,结果将合并为单个报告
validator /path/to/search /another/path/to/search
排除目录
排除搜索路径中的子目录
validator --exclude-dirs=/path/to/search/tests /path/to/search
排除文件类型
排除搜索路径中的文件类型。可用的文件类型有csv
、env
、hcl
、hocon
、ini
、json
、plist
、properties
、toml
、xml
、yaml
和yml
validator --exclude-file-types=json /path/to/search
自定义递归深度
默认没有递归限制。如果需要,可以将递归深度设置为整数值。如果将深度设置为0
,将禁用递归,仅验证搜索路径中的文件。
validator --depth=0 /path/to/search
自定义报告输出
您可以自定义报告输出并将结果保存到文件(默认名称是result.{extension})。可用的报告类型有standard
、junit
、json
和sarif
。您可以通过链接--reporter
标志来指定多个报告类型。
validator --reporter=json:- /path/to/search
validator --reporter=json:output.json --reporter=standard /path/to/search
分组报告输出
按文件类型、目录或通过-失败分组报告输出。支持一个或多个分组。
validator -groupby filetype
validator -groupby directory,pass-fail
抑制输出
传递--quiet
标志会抑制所有输出到stdout。如果有无效的配置文件,验证器工具将以1退出。执行中的任何错误(如无效路径)仍将显示。
validator --quiet /path/to/search
使用glob模式搜索文件
使用-globbing
标志验证匹配指定模式的文件。将模式作为位置参数包含在双引号中。支持多个glob模式和直接文件路径。
# 验证目录中所有`.json`文件
validator -globbing "/path/to/files/*.json"
# 递归验证子目录中所有`.json`文件
validator -globbing "/path/to/files/**/*.json"
# 混合glob模式和路径
validator -globbing "/path/*.json" /path/to/search
环境变量
config-file-validator支持通过环境变量设置选项。如果同时设置了命令行标志和环境变量,命令行标志将优先。支持的环境变量如下:
环境变量 | 等效标志 |
---|---|
CFV_DEPTH | -depth |
CFV_EXCLUDE_DIRS | -exclude-dirs |
CFV_EXCLUDE_FILE_TYPES | -exclude-file-types |
CFV_REPORTER | -reporter |
CFV_GROUPBY | -groupby |
CFV_QUIET | -quiet |
CFV_GLOBBING | -globbing |
构建
项目可以从源代码下载和构建,需要Go 1.21+环境。成功构建后,可以将二进制文件移动到操作系统PATH上的位置。
macOS构建
CGO_ENABLED=0 \
GOOS=darwin \
GOARCH=amd64 \ # 对于Apple Silicon使用arm64
go build \
-ldflags='-w -s -extldflags "-static"' \
-tags netgo \
-o validator \
cmd/validator/validator.go
Linux构建
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
go build \
-ldflags='-w -s -extldflags "-static"' \
-tags netgo \
-o validator \
cmd/validator/validator.go
Windows构建
CGO_ENABLED=0 \
GOOS=windows \
GOARCH=amd64 \
go build \
-ldflags='-w -s -extldflags "-static"' \
-tags netgo \
-o validator.exe \
cmd/validator/validator.go
Docker构建
您也可以使用提供的Dockerfile将config file validator工具构建为容器
docker build . -t config-file-validator:v1.8.0
完整示例
以下是一个完整的Go示例,展示如何在代码中使用config-file-validator库:
package main
import (
"fmt"
"log"
"github.com/Boeing/config-file-validator/pkg/finder"
"github.com/Boeing/config-file-validator/pkg/validator"
)
func main() {
// 初始化文件查找器
fileFinder := finder.FileSystemFinderInit(
finder.WithPathRoots("/path/to/search"), // 设置搜索路径
finder.WithExcludeDirs("tests"), // 排除目录
finder.WithDepth(1), // 设置递归深度
)
// 查找文件
files, err := fileFinder.Find()
if err != nil {
log.Fatalf("查找文件失败: %v", err)
}
// 初始化验证器
validator := validator.Init()
// 验证文件
results := validator.Validate(files)
// 处理结果
for _, result := range results {
if result.IsValid {
fmt.Printf("文件 %s 验证通过\n", result.FilePath)
} else {
fmt.Printf("文件 %s 验证失败: %v\n", result.FilePath, result.Error)
}
}
}
贡献
我们欢迎贡献!请参考我们的贡献指南。
许可证
Config File Validator根据Apache 2.0许可证发布。
更多关于golang跨平台配置文件验证工具插件库config-file-validator的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang跨平台配置文件验证工具插件库config-file-validator的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang跨平台配置文件验证工具config-file-validator使用指南
config-file-validator
是一个用于验证配置文件格式和内容的Golang库,支持跨平台使用。下面我将详细介绍其使用方法并提供示例代码。
安装
首先安装该库:
go get github.com/smallstep/config-file-validator
基本功能
该库支持验证多种格式的配置文件:
- JSON
- YAML
- TOML
- INI
- HCL
- 环境变量文件(.env)
核心概念
- 验证器(Validator): 负责验证特定格式的文件
- 文件类型检测(FileTypeDetector): 根据文件扩展名或内容检测文件类型
- 验证结果(ValidationResult): 包含验证结果信息
使用示例
1. 基本使用
package main
import (
"fmt"
"log"
validator "github.com/smallstep/config-file-validator"
)
func main() {
// 创建默认验证器
fileValidator, err := validator.New()
if err != nil {
log.Fatal(err)
}
// 验证单个文件
result, err := fileValidator.ValidateFile("config.yaml")
if err != nil {
log.Fatal(err)
}
if !result.IsValid {
fmt.Printf("配置文件 %s 验证失败:\n", result.FilePath)
for _, err := range result.Errors {
fmt.Printf("- %s\n", err)
}
} else {
fmt.Printf("配置文件 %s 验证通过\n", result.FilePath)
}
}
2. 验证目录下所有配置文件
func validateDirectory() {
fileValidator, err := validator.New()
if err != nil {
log.Fatal(err)
}
// 验证目录下所有配置文件
results, err := fileValidator.ValidateDirectory("./configs")
if err != nil {
log.Fatal(err)
}
for _, result := range results {
if !result.IsValid {
fmt.Printf("%s 验证失败:\n", result.FilePath)
for _, err := range result.Errors {
fmt.Printf("- %s\n", err)
}
}
}
}
3. 自定义验证器
func customValidator() {
// 只启用JSON和YAML验证器
validators := []validator.Validator{
validator.JSONValidator{},
validator.YAMLValidator{},
}
// 创建自定义文件类型检测器
fileTypeDetector := validator.DefaultFileTypeDetector{}
fileValidator, err := validator.New(
validator.WithValidators(validators),
validator.WithFileTypeDetector(fileTypeDetector),
)
if err != nil {
log.Fatal(err)
}
// 使用自定义验证器验证文件
result, err := fileValidator.ValidateFile("custom-config.json")
if err != nil {
log.Fatal(err)
}
fmt.Printf("验证结果: %+v\n", result)
}
4. 验证文件内容(不通过文件)
func validateContent() {
fileValidator, err := validator.New()
if err != nil {
log.Fatal(err)
}
yamlContent := `
app:
name: myapp
port: 8080
`
// 验证YAML内容
result, err := fileValidator.ValidateContent("example.yaml", []byte(yamlContent))
if err != nil {
log.Fatal(err)
}
fmt.Printf("内容验证结果: %+v\n", result)
}
高级功能
1. 添加自定义验证器
type CustomValidator struct{}
func (v CustomValidator) Validate(filePath string, content []byte) (validator.ValidationResult, error) {
// 实现自定义验证逻辑
return validator.ValidationResult{
FilePath: filePath,
IsValid: true,
}, nil
}
func (v CustomValidator) SupportedFileExtensions() []string {
return []string{".custom"}
}
func customValidatorExample() {
customValidator := CustomValidator{}
fileValidator, err := validator.New(
validator.WithValidators([]validator.Validator{
validator.JSONValidator{},
customValidator,
}),
)
if err != nil {
log.Fatal(err)
}
// 使用自定义验证器验证文件
result, err := fileValidator.ValidateFile("config.custom")
if err != nil {
log.Fatal(err)
}
fmt.Printf("自定义验证结果: %+v\n", result)
}
2. 忽略特定文件
func validateWithIgnore() {
fileValidator, err := validator.New(
validator.WithIgnorePatterns([]string{"*.tmp", "temp/*"}),
)
if err != nil {
log.Fatal(err)
}
// 会忽略所有.tmp文件和temp目录下的文件
results, err := fileValidator.ValidateDirectory(".")
if err != nil {
log.Fatal(err)
}
for _, result := range results {
fmt.Printf("验证文件: %s, 结果: %v\n", result.FilePath, result.IsValid)
}
}
最佳实践
- 在CI/CD管道中使用: 可以在构建或部署前验证所有配置文件
- 与单元测试结合: 编写测试用例验证关键配置文件
- 自定义验证规则: 扩展基础验证器添加业务特定规则
注意事项
- 大文件验证可能会消耗较多内存
- 复杂嵌套结构的验证可能需要自定义验证器
- 验证器不保证配置值的业务逻辑正确性,只验证格式有效性
通过config-file-validator
,你可以轻松地为Golang项目添加强大的配置文件验证功能,确保配置文件的正确性和一致性。