diff --git a/app/func.go b/app/func.go index 569588f..922640f 100644 --- a/app/func.go +++ b/app/func.go @@ -114,3 +114,7 @@ func StringToHump(s string) string { } return string(data[:]) } + +func GetRoot() string { + return app.GetBean("config").(app.GetRoot).GetRoot() +} diff --git a/bootstrap/providers/config_provider.go b/bootstrap/providers/config_provider.go index b54dbf4..d49609d 100644 --- a/bootstrap/providers/config_provider.go +++ b/bootstrap/providers/config_provider.go @@ -199,3 +199,32 @@ func (c *ConfigProvider) GetBean(alias string) interface{} { return &aliasDef } + +var ROOT string = "" + +func (c *ConfigProvider) GetRoot() string { + if ROOT != "" { + return ROOT + } + + pwd, _ := os.Getwd() + parDir := "" + + if defaultConfigDir == nil { + // 单元测试中, 可能未初始化框架, 从本目录开始往上查找go.mod文件确定跟目录 + for i := 0; i <= 100; i++ { + checkDir := pwd + parDir + _, err1 := os.Stat(checkDir + "/go.mod") + _, err2 := os.Stat(checkDir + "/.env") + if err1 == nil || err2 == nil { + parDir = checkDir + break + } + parDir += "/.." + } + } else { + parDir = pwd + } + ROOT = parDir + return parDir +} diff --git a/bootstrap/services/app/constraint.go b/bootstrap/services/app/constraint.go index 6ca05d0..3e64b25 100644 --- a/bootstrap/services/app/constraint.go +++ b/bootstrap/services/app/constraint.go @@ -52,6 +52,10 @@ type AppendRun interface { AppendRun(fun func()) } +type GetRoot interface { + GetRoot() string +} + // GetBean 只能返回指针的值 func GetBean(alias string) interface{} { arr := strings.Split(alias, ", ")