forked from shunfei/cronsun
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
134 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
// 加载json(可配置扩展字段)配置文件 | ||
// | ||
// { | ||
// "Debug": true, | ||
// "Log": "@extend:./log.json" | ||
// } | ||
package utils | ||
|
||
import ( | ||
"bytes" | ||
"encoding/json" | ||
"fmt" | ||
"io/ioutil" | ||
"os" | ||
"path/filepath" | ||
"regexp" | ||
) | ||
|
||
var ( | ||
extendTag = "@extend:" | ||
pwdTag = "@pwd@" | ||
rootTag = "@root@" | ||
root = "" | ||
) | ||
|
||
// 设置扩展标识,如果不设置,默认为 '@extend:' | ||
func SetExtendTag(tag string) { | ||
extendTag = tag | ||
} | ||
|
||
func SetRoot(r string) { | ||
root = r | ||
} | ||
|
||
// 设置当前路径标识,如果不设置,默认为 '@pwd@' | ||
// @pwd@ 会被替换成当前文件的路径, | ||
// 至于是绝对路径还是相对路径,取决于读取文件时,传入的是绝对路径还是相对路径 | ||
func SetPathTag(tag string) { | ||
pwdTag = tag | ||
} | ||
|
||
//加载json(可配置扩展字段)配置文件 | ||
func LoadExtendConf(filePath string, v interface{}) error { | ||
data, err := extendFile(filePath) | ||
if err != nil { | ||
return err | ||
} | ||
return json.Unmarshal(data, v) | ||
} | ||
|
||
func extendFile(filePath string) (data []byte, err error) { | ||
fi, err := os.Stat(filePath) | ||
if err != nil { | ||
return | ||
} | ||
if fi.IsDir() { | ||
err = fmt.Errorf(filePath + " is not a file.") | ||
return | ||
} | ||
|
||
b, err := ioutil.ReadFile(filePath) | ||
if err != nil { | ||
return | ||
} | ||
|
||
if len(root) != 0 { | ||
b = bytes.Replace(b, []byte(rootTag), []byte(root), -1) | ||
} | ||
|
||
dir := filepath.Dir(filePath) | ||
return extendFileContent(dir, bytes.Replace(b, []byte(pwdTag), []byte(dir), -1)) | ||
} | ||
|
||
func extendFileContent(dir string, content []byte) (data []byte, err error) { | ||
//检查是不是规范的json | ||
test := new(interface{}) | ||
err = json.Unmarshal(content, &test) | ||
if err != nil { | ||
return | ||
} | ||
|
||
// 替换子json文件 | ||
reg := regexp.MustCompile(`"` + extendTag + `.*?"`) | ||
data = reg.ReplaceAllFunc(content, func(match []byte) []byte { | ||
match = match[len(extendTag)+1 : len(match)-1] | ||
sb, e := extendFile(filepath.Join(dir, string(match))) | ||
if e != nil { | ||
err = fmt.Errorf("替换json配置[%s]失败:%s\n", match, e.Error()) | ||
} | ||
return sb | ||
}) | ||
return | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package utils | ||
|
||
import ( | ||
"testing" | ||
|
||
. "github.com/smartystreets/goconvey/convey" | ||
) | ||
|
||
func TestLoadExtendConf(t *testing.T) { | ||
testFile := "test.json" | ||
|
||
type conf struct { | ||
Debug bool | ||
Num int | ||
Log struct { | ||
Level int | ||
Path string | ||
} | ||
} | ||
Convey("confutil package test", t, func() { | ||
Convey("load test file should be success", func() { | ||
c := &conf{} | ||
err := LoadExtendConf(testFile, c) | ||
So(err, ShouldBeNil) | ||
So(c.Debug, ShouldBeTrue) | ||
So(c.Log.Path, ShouldEqual, "./tmp") | ||
}) | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"Debug": true, | ||
"Num": 1, | ||
"Log": "@extend:test1.json" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"Level": 2, | ||
"Path": "@pwd@/tmp" | ||
} |