在实际项目开发中,我们经常需要在配置文件中引入一些自定义配置,比如数据库连接信息、第三方服务的 secretId、appKey 等。
Kratos 框架使用的是 配置与代码类型强绑定机制(proto 定义 → YAML 配置 → Go struct)。
本文将以「配置数据库信息」为例,带你一步步完成从 YAML 配置到代码引用的全过程。
1、在config.yaml文件中加入自己的数据库信息
data:
database:
driver: mysql
user: root
password: "123456"
host: 127.0.0.1
port: 3306
dbname: hhj
💡注意:
Kratos 的配置加载是基于字段层级匹配的,所以这里的缩进和字段名要和 conf.proto 定义一致。
2、在conf.proto中定义自己配置的信息的类型,并在文件最上方的Bootstrap中声明
message Bootstrap {
Server server = 1; // 框架默认配置
Data data = 2; // 自定义数据库配置
.... //其他的一些配置类型
}
message Data {
Database database = 1;
message Database {
string driver = 1;
string user = 3;
string password = 4;
string host = 5;
int32 port = 6;
string dbname = 7;
}
}
make config 生成对应的go文件。这样会在 internal/conf/conf.pb.go 中生成对应的 Bootstrap, Data, Database 等结构体。
3、在wire.go和main.go中的wireApp的参数列表中添加自己定义的配置
修改wire.go中的wireApp方法的参数列表(加入*conf.Data)
func wireApp(*conf.Server, *conf.Data, log.Logger)
修改main.go中wireApp方法(加入bc.Data)
var bc conf.Bootstrap
if err := c.Scan(&bc); err != nil {
panic(err)
}
app, cleanup, err := wireApp(bc.Server, bc.Data, logger)
4、在构造函数上引用自己定义的配置
因为我需要在data.go中使用数据库配置信息,所以在data.go的构造函数中引入
func NewData(c *conf.Data, logger log.Logger, db *gorm.DB)
5、完整流程总结
① 在 config.yaml 添加配置项 编写 YAML 配置
② 在 conf.proto 定义结构 确保字段名与层级一致
③ 执行 protoc 生成 Go 文件 生成类型绑定结构
④ 修改 wire.go 与 main.go 注入 *conf.Data 参数
⑤ 在构造函数中使用配置 使用配置完成初始化
6、流程图(理解配置注入流程)
config.yaml
↓
conf.proto
↓
conf.pb.go
↓
wire.go / main.go
↓
data.go / service.go
7、结语
通过以上步骤,我们就完成了在 Kratos 框架 中引入自定义配置的完整流程。
这种设计方式的优点是:
✅ 配置与代码强类型绑定,避免运行时出错
✅ 扩展性强,新增配置项非常方便
✅ 便于不同环境配置切换(如 dev / prod)
希望这篇文章能帮你理清 Kratos 的配置加载机制,让你的项目配置更优雅、更安全!
1379

被折叠的 条评论
为什么被折叠?



