// Package util... // // Description : 文件相关工具 // // Author : go_developer@163.com<白茶清欢> // // Date : 2021-04-26 6:00 下午 package util import ( "io/ioutil" "os" "strings" "github.com/pkg/errors" yml "gopkg.in/yaml.v2" ) // file 文件相关操作 // // Author : go_developer@163.com<白茶清欢> // // Date : 14:08 2022/5/14 type file struct { } // GetProjectPath 获取项目路径(可执行文件所在目录) // // Author : go_developer@163.com<白茶清欢> // // Date : 10:32 下午 2021/4/26 func (f *file) GetProjectPath() (string, error) { rootPath, err := os.Getwd() if nil != err { return "", err } pathArr := strings.Split(rootPath, "/") if len(pathArr) > 0 { if pathArr[len(pathArr)-1] == "test" { rootPath = strings.Join(pathArr[0:len(pathArr)-1], "/") } } return rootPath, nil } // ReadYmlContent 读取yml配置问价,并解析到指定的结构体中 // // Author : go_developer@163.com<白茶清欢> // // Date : 10:35 下午 2021/4/26 func (f *file) ReadYmlContent(filePath string, result interface{}) error { if nil == result { return errors.New("接收读取结果的数据指针为NIL") } var ( fileContent []byte err error ) if fileContent, err = f.ReadFileContent(filePath); nil != err { return err } return yml.Unmarshal(fileContent, result) } // ReadJSONContent 读取JSON内容,并解析到指定的结构体中 // // Author : go_developer@163.com<白茶清欢> // // Date : 15:23 2022/6/9 func (f *file) ReadJSONContent(filePath string, result interface{}) error { if nil == result { return errors.New("接收读取结果的数据指针为NIL") } var ( fileContent []byte err error ) if fileContent, err = f.ReadFileContent(filePath); nil != err { return err } return JSON.UnmarshalWithNumber(fileContent, result) } // ReadFileContent 读取文件内容 // // Author : go_developer@163.com<白茶清欢> // // Date : 10:37 下午 2021/4/26 func (f *file) ReadFileContent(filePath string) ([]byte, error) { if exist, isFile := f.IsFileExist(filePath); !exist || !isFile { //文件不存在或者是一个目录 return nil, errors.New(filePath + " 文件不存在或者是一个目录!") } //打开文件 var ( fileHandler *os.File err error ) if fileHandler, err = os.Open(filePath); nil != err { return nil, err } return ioutil.ReadAll(fileHandler) } // IsFileExist 判断文件是否存在 // // Author : go_developer@163.com<白茶清欢> // // Date : 10:37 下午 2021/4/26 func (f *file) IsFileExist(filePath string) (bool, bool) { fileStat, err := os.Stat(filePath) return nil == err || os.IsExist(err), (nil == err || os.IsExist(err)) && !fileStat.IsDir() }