有时候我们修改了配置 json 或者 yaml 文件,需要校验下文件格式是否正确
源码
package main
import (
"flag"
"fmt"
"github.com/ChengjinWu/gojson"
"github.com/goccy/go-yaml"
"io/ioutil"
"os"
"path/filepath"
)
// GOOS=linux go build -x -v -ldflags "-s -w" -o gojson main.go
func main() {
//if len(os.Args)!=0{
// fmt.Println(os.Args[0])// args 第一个片 是文件路径
//}
//fmt.Println(os.Args[1]) // 第二个参数是, 用户输入的参数 例如 go run osdemo01.go 123
//flag简单使用方法
backup_dir := flag.String("f", "config.json", "文件格式 -f config.json | -f config.yaml")
flag.Parse()
fmt.Println("验证文件: ",*backup_dir)
filename :=*backup_dir
bools := Exists(filename)
if !bools{
fmt.Println("文件不存在");
return
}
var suffix string
suffix = filepath.Ext(filename)
switch suffix {
case ".json":
fmt.Println("开始检验json文件",filename);
err := validJson(filename)
if err != nil {
fmt.Println("校验失败",err);
return
}else{
fmt.Println("格式正确");
}
case ".yaml":
fmt.Println("开始检验yaml文件",filename);
err := validYmal(filename)
if err != nil {
fmt.Println("校验失败",err);
return
}else{
fmt.Println("格式正确");
}
default:
fmt.Println("没找到验证的文件");
}
}
func validJson(filename string ) (err error) {
// 1, 把配置文件读进来
content, err := ioutil.ReadFile(filename);
if err != nil {
fmt.Println(err);
return
}
err = gojson.CheckValid(content)
return
}
func validYmal(filename string ) (err error ) {
yamlFile, err := ioutil.ReadFile(filename)
if err != nil {
return
}
result := make(map[string]interface{})
if err != nil {
return
}
err = yaml.Unmarshal(yamlFile, &result)
return
}
func Exists(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
打包成gojson后校验
GOOS=linux GOARCH=amd64 go build -x -v -ldflags "-s -w" -o gojson main.go
./gojson -f config.json 或者 ./gojson -f config.yaml



