Open main menu
首页
专栏
课程
分类
归档
Chat
Sci-Hub
谷歌学术
Libgen
GitHub镜像
登录/注册
搜索
关闭
Previous
Previous
Next
Next
前面已经学习了路由和控制器,我们把逻辑都是写在控制器中的,我们把业务逻辑抽象成服务层,控制器只做请求处理,业务调用和数据响应。 ## 1.服务定义 我们使用interface定义服务,具有那些功能,服务的实现可以是很多种,这样的好处可以无缝切换结构实现,让使用者关注”这个东西怎么用“,而不用关注具体是什么吧,统一的接口也可以让你的程序拆装更方便。 hello_contract.go ```go package hello type HelloContract interface { SayHello(username string) string } ``` hello_service.go ```go package hello import "fmt" type HelloService struct { } func (h *HelloService)SayHello(username string) string { return fmt.Sprintf("hello, %s", username) } ``` 由此我们服务已经编写完成,基于上一节的例子,我们改造一下: test.go ```go package api import ( "cn.sockstack/gin_demo/requests" "github.com/gin-gonic/gin" "net/http" ) func Test(c *gin.Context) { //实例化一个TestRequest结构体,用于接收参数 testStruct := requests.TestRequest{} //接收请求参数 err := c.ShouldBind(&testStruct) //判断参数校验是否通过,如果不通过,把错误返回给前端 if err != nil { c.JSON(http.StatusOK, gin.H{"error": requests.Translate(err)}) return } //调用HelloService var service hello.HelloContract //这里使用的是接口定义了变量 service = &hello.HelloService{} //调用服务的方法处理业务 result := service.SayHello(testStruct.Username) //校验通过,返回请求参数 c.JSON(http.StatusOK, gin.H{"data": result}) } ```
登录查看更多内容
【Gin实战系列】服务编写
作者
sockstack
许可协议
CC BY 4.0
发布于
2023-09-02
修改于
2023-09-02
尚未登录
登录 / 注册
专栏目录
【Gin实战系列】快速入门
【Gin实战系列】项目结构
【Gin实战系列】项目配置
【Gin实战系列】控制器于路由
【Gin实战系列】请求参数处理
【Gin实战系列】校验错误信息
【Gin实战系列】服务编写
【Gin实战系列】模型定义
【Gin实战系列】数据库操作
【Gin实战系列】请求响应处理
【Gin实战系列】统一结构响应处理
【Gin实战系列】中间件使用
【Gin实战系列】日志使用
【Gin实战系列】cookie处理
【Gin实战系列】session处理
【Gin实战系列】模板渲染
【Gin实战系列】实例:密码加密
【Gin实战系列】实例:登录注册
【Gin实战系列】jwt身份认证
【Gin实战系列】使用 swagger 文档
【Gin实战系列】实例:文件上传