Kratos 集成Gin

article/2025/10/5 13:52:41

Kratos 集成 Gin

    • 规范项目分层
    • 处理请求处理、响应
    • 编写路由route
    • Kratos 集成gin
    • 注入 wire set中

源码
Kratos 可以在 .proto文件定义请求类型,URL,响应等等,如官方示例:

service BlogService {rpc CreateArticle (CreateArticleRequest) returns (CreateArticleReply) {option (google.api.http) = {post: "/v1/article/"body: "*"};}rpc UpdateArticle (UpdateArticleRequest) returns (UpdateArticleReply) {option (google.api.http) = {put: "/v1/article/{id}"body: "*"};}rpc DeleteArticle (DeleteArticleRequest) returns (DeleteArticleReply) {option (google.api.http) = {delete: "/v1/article/{id}"};}rpc GetArticle (GetArticleRequest) returns (GetArticleReply) {option (google.api.http) = {get: "/v1/article/{id}"};}rpc ListArticle (ListArticleRequest) returns (ListArticleReply) {option (google.api.http) = {get: "/v1/article/"};}
}

通过使用命令行工具 kratos 可以生成相关 http 请求处理、路由定义等,省略了自己去处理请求、响应等过程。

Kratos 的项目分层借鉴了 DDD 的思想,在官方推荐的 project layout 中,用户接口层(interfaces)的作用体现在了 api 层。

如果我们不使用官方自带的 http 处理方案(通过 .proto 生成样板代码),而是使用 gin 框架的话,需要自己做如下事情:

  1. 规范项目分层,在 /internal 目录下,新增一个用户接口层 /interfaces (DDD思想)
  2. 通过gin编写自己的请求处理、响应
  3. 通过gin定义路由
  4. kratos 集成 gin
  5. 注入 wire set 中

规范项目分层

PS :kratos 的 biz 层更多是DDD 中 domain + repo接口定义 ,但是官方该层给的后缀却是 XXUseCase,个人感觉不太对啊, 还是自己的知识错了?

/internal目录下新建 /interfaces目录

之后的处理请求、编写路由、wire Provider 都在该目录下定义,最终结果如图:在这里插入图片描述

处理请求处理、响应

在用户接口层 /interfaces 编写请求处理的方法,写了个最简单的 SayHi

// user.go 
package interfacesimport ("context""kratos-admin/internal/service""github.com/go-kratos/kratos/v2/log""github.com/gin-gonic/gin"
)type UserUseCase struct {userService *service.UserServicelog         *log.Helper
}func NewUserUseCase(us *service.UserService, logger log.Logger) *UserUseCase {return &UserUseCase{userService: us, log: log.NewHelper(logger)}
}func (u *UserUseCase) SayHi(c *gin.Context) {c.JSON(200, gin.H{"msg": "hello world",})
}

编写路由route

// routes.go package interfacesimport ("github.com/gin-gonic/gin"
)func RegisterHTTPServer(us *UserUseCase) *gin.Engine {router := gin.New()rootGrp := router.Group("/api"){userGrp := rootGrp.Group("/user")userGrp.GET("/sayhi", us.Get)}return router
}

Kratos 集成gin

/server/http.go中注册路由:

// server/http.go// NewHTTPServer new a HTTP server.
func NewHTTPServer(c *conf.Server,user *interfaces.UserUseCase,  // 新增参数logger log.Logger) *transHttp.Server {var opts = []transHttp.ServerOption{transHttp.Middleware(recovery.Recovery(),tracing.Server(),logging.Server(logger),metrics.Server(),validate.Validator(),),}if c.Http.Network != "" {opts = append(opts, transHttp.Network(c.Http.Network))}if c.Http.Addr != "" {opts = append(opts, transHttp.Address(c.Http.Addr))}if c.Http.Timeout != nil {opts = append(opts, transHttp.Timeout(c.Http.Timeout.AsDuration()))}srv := transHttp.NewServer(opts...)// 调用 interfaces.RegisterHTTPServer 注入到 srv 中srv.HandlePrefix("/", interfaces.RegisterHTTPServer(user))return srv
}

注入 wire set中

1. 编写 ProviderSet

// interfaces.go
package interfacesimport "github.com/google/wire"// ProviderSet is interfaces providers.
var ProviderSet = wire.NewSet(NewUserUseCase)

2. 增加到 wire.go中

// initApp init kratos application.
func initApp(*conf.Server, *conf.Data, log.Logger) (*kratos.App, func(), error) {panic(wire.Build(server.ProviderSet,data.ProviderSet,biz.ProviderSet,service.ProviderSet,interfaces.ProviderSet, // 新增的 interfaces provider setnewApp))
}

3. 执行 wire 命令,生成新的 wire_gen.go 文件

# cd 到 mian.go 所在的目录中
cd  cmd/XXXX  # 执行 wire
wire

接下来自己启动项目,测试接口 : http://127.0.0.1:8000/api/user/sayhi 即可

亲测可以~


http://chatgpt.dhexx.cn/article/CID6BnJ4.shtml

相关文章

kratos mysql_Kratos--安装及配置

安装GO环境 安装protoc以及相关的包和插件 安装Kratos Go version>1.12 and GO111MODULEon go get -u github.com/bilibili/kratos/tool/kratos 提示:安装过程中可能会出现部分包下载失败,可以手动下载包然后拷贝至相应文件目录。 快速开始 cd $GOPAT…

初识go-kratos

推荐看一下 Kratos 官方文档 更加流畅观看此文章,本机器这里已经安装好了 kratos、proto、wire、make 等所需的命令工具 1.先下载beer-shop模板 git clone https://github.com/go-kratos/beer-shop.git 2.删除api和app下的全部文件 3.修改go.mod文件 把module g…

kratos mysql_kratos微服务框架学习笔记一(kratos-demo)

本文将为您描述kratos微服务框架学习笔记一(kratos-demo),教程操作步骤: 目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和github,现在开发任务也差不多完成…

Kratos日志

一.如何在kratos框架中使用 参考官方文档中描述,为了方便业务自适配不同的 log 接入使用,Logger 只包含了最简单的 Log 接口。当业务需要在 Kratos 框架内部使用自定义的 log的时候,只需要简单实现方法即可。日志库较为公用建议放在kit基础库…

kratos框架学习,在Linux 下面使用kratos 创建demo 项目然后跑起来。使用 kratos new kratos-demo 一键创建项目,脚手架非常方便。但是依赖grpc没有起来

目录 前言1,关于kratos2,使用 kratos new kratos-demo 一键创建项目3,解决gRPC 编译问题4,只创建HTTP服务 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/109139648 未经博主允许不得转载。 博主地址…

砥砺前行 | Kratos 框架 v2 版本架构演进之路

Kratos 是一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具。名字来源于游戏《战神》,该游戏以希腊神话为背景,讲述了奎托斯(Kratos)由凡人成为战神并展开弑神屠杀的冒险历程。 写在前面 从 2021 年 2 月份&…

【kratos入门实战教程】1-kratos项目搭建和开发环境配置

1、系列目录 【kratos入门实战教程】0-商城项目介绍【kratos入门实战教程】1-kratos项目搭建和开发环境配置【kratos入门实战教程】2-实现注册登陆业务 2、概览 经过上一篇的说明,本篇教程正式开始搭建项目。深入解析工程项目的目录结构和介绍一些开发需要使用的工…

go微服务框架Kratos简单使用总结

Kratos是B站开源的一款go的微服务框架,最近PS5上的 战神诸神黄昏比较火,主角就是奎托斯。这个框架的名字就取自他。 在进行框架选型时,对比了目前主流的很多go微服务框架,如Zero,最后对比之下,选择了Krato…

c语言代码后return0表示什么意思,C语言中return 0 表示什么

满意答案 强计划止步不.. 2013.01.03 采纳率:44% 等级:12 已帮助:7948人 return表示函数结束, 也就是说CPU执行到return后, 就会跳转(如果要好理解的话, 是"回到")到调用它的地方, 然后继续执行. 而0, 是一个整型, 一般来说retu…

c语言代码后return0表示什么意思,return 0是什么意思 ?

return 0 代表告诉调用者程序是正常退出的。return是C预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。 这个return语句结束main()函数的执行,把0返还给操作系统。从main()函数返回0表…

接口性能测试方案

一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点再可以细分,如对于一个 C/S 软件(B/S一样)的响应时间可以细分为网络传输时间、应…

软件性能测试方案-性能测试准备

性能测试目的 1、性能调优 开发人员对系统调优后,需要测试人员配合去做性能测试,验证这次优化是否有效果。如果性能指标相比较之前的性能指标更好了,说明系统优化的有效果。反之说明调优不理想 2、新业务、新接口上线 系统从无到上线&…

参考文档一:性能测试---测试方案

性能测试详细测试方案 前言 平台XX项目系统已经成功发布,依据项目的规划,未来势必会出现业务系统中信息大量增长的态势。 随着业务系统在生产状态下日趋稳定、成熟,系统的性能问题也逐步成为了我们关注的焦点:每天大数据量的“…

【性能测试】性能测试方案设计

性能测试方案设计 1. 性能测试流程 系统架构调研 业务模型分析调研 测试需求分析设计测试方案测试环境搭建测试数据准备测试工具开发测试场景设置执行场景测试测试结果分析提交测试报告 2. 性能测试需求分析和范围确定 收集性能需求信息分析应用程序 系统设计和架构信息网…

接口性能测试方案 白皮书 V1.0

一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点再可以细分,如对于一个 C/S 软件的响应时间可以细分为网络传输时间、应用服务器处理时间、数据库服务器处…

性能测试案例

做性能测试之前需要对Linux内核参数优化 Linux内核参数优化 Linux服务器默认支持1024个TCP链接,在性能测试时,无论压力机还是项目服务器,都需要对tcp参数进行一些优化 ulimit -n:查看当前Linux系统最大的连接数 修改Linux系统允许…

性能测试(一)

一)谈谈你对于性能测试的理解: 1)性能测试的概念 测试目的与功能测试的区别性能测试的指标 2)性能测试需要借助工具来进行测试,可以说说自己是用了哪些工具以及如何使用工具来进行性能测试 3)为了避免面试官在性能测试方面进行深究,主动说性能测试难就难…

最全面性能测试方案模板

性能测试方案书 1 简介 1.1目的 编写本文档的目的在于描述测试项目的测试范围,定义测试条件和目标,测试策略和要求,分析可能的风险,提供相应的规避措施或应急对策,并确定测试整体进度的计划和人力资源安排等。 测试目…

性能测试介绍

转载来源 公众号《测试开发技术》 1.性能测试要开专栏了 提起性能测试,可能很多互联网从业人员会感觉比较混淆(不仅仅只是测试人员会弄混淆,很多开发人员、管理人员对性能测试也都是一知半解)。性能测试,它是属于测试…

性能测试流程-性能测试2

性能测试流程 1. 性能测试需求分析 2. 性能测试计划及方案 3. 性能测试用例 4. 搭建测试环境 5. 测试数据准备 6. 测试脚本编写 7. 执行测试脚本 8. 性能测试监控 9. 性能分析和调优 10. 性能测试回归 11. 性能测试报告总结 1、性能测试需求分析 熟悉被测系统 熟…