-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Open
Labels
Description
Go version
go version go1.22.10 linux/amd64
GoFrame version
v2.6.0
What do you want to ask?
- 我把链接到 nacos, 并获取指定 dataId 配置信息的 nacosClient, 通过
g.Cfg().SetAdapter(nacosClient)设置为配置来源,并把这封装为独立项目之外的 pkg repo - 然后 goframe 的项目在 main.go 中通过 import
_ "gitlab.private.com/op/rubick/config/nacos"来触发其初始化并执行 SetAdapter - 同时在 main.go 中会有
import _ "xxxx/internal/logic"来触发服务注册的逻辑,这是 goframe 框架的约定 - 而我在 logic 的 init() 中会有读取 g.Cfg() 中配置的逻辑,比如:
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
type sMeego struct {
ProjectId string
}
func init() {
service.RegisterMeego(New())
}
func New() *sMeego {
ctx := gctx.New()
// appId := g.Cfg().MustGet(ctx, "meego.pluginId")
// appSecret := g.Cfg().MustGet(ctx, "meego.pluginSecret")
s := &sMeego{
ProjectId: g.Cfg().MustGet(ctx, "meego.projectId").String(),
}
return s
}
- 在 main.go 的 import 中, 我们的 import 顺序大概是
import (
_ "gitlab.private.com/op/rubick/config/nacos"
_ "gitlab.private.com/op/acd/internal/logic"
"github.com/gogf/gf/v2/os/gctx"
"gitlab.private.com/op/acd/internal/cmd"
)
-
遇到的问题:并不是所有的 logic 的 init 中都能够使用 nacosClient 来获取配置,实际验证下来,有部分 logic 执行 init 时,
import "gitlab.private.com/op/rubick/config/nacos"还未执行,导致其使用默认的 FileAdapter, 进而读取不到配置,比如前面举例中的 meego,而有些 logic 的 init 会在 nacos 之后,进而能正常获取配置 -
实际尝试下来的结论是:g.Cfg() 执行时,如果 nacos 的 SetAdapter 未执行,就看不到配置,而框架又不能可靠保证先 import nacos
-
如何保证自定义的初始化可靠的先被执行,或者我使用的姿势不对?