115 lines
2.7 KiB
Go
115 lines
2.7 KiB
Go
// 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()
|
|
}
|