请教老师一个gin的问题?

来源:13-6 为gin增加middleware

wlxz

2020-01-02

请问,gin可以象iris一样注册service吗?

比如iris的例子:
router.go

userService:= services.NewUserService()
admin := mvc.New(b.Party("/admin"))
admin.Register(userService)

user_controller.go

type UserController struct {
	Ctx     iris.Context
	Service services.userService
}
func (c *UserController) Get() mvc.Result {
	datalist := c.Service.GetAll()
}

在gin里没有找到这种方式,目前只能在每个handlers里实例化服务

写回答

2回答

ccmouse

2020-01-06

可以用函数式编程来打包我们的实例,请参考下面的代码:

package main

import (
  "net/http"

  "github.com/gin-gonic/gin"
  "go.uber.org/atomic"
)

type Counter struct {
  count atomic.Int32
}

func (c *Counter) Counter(ctx *gin.Context) {
  ctx.String(http.StatusOK, "%d", c.count.Inc())
}

func main() {
  r := gin.Default()
  c := Counter{}
  r.GET("/counter", c.Counter)
  r.Run()
}

0
4
wlxz
非常感谢!
2020-01-31
共4条回复

乐只君子

2020-01-02

gin 没有提供 MVC,但可以自己实现。比如可以参考:

https://github.com/mydevc/go-gin-mvc

0
1
wlxz
感谢你的回复!不过我的问题与这个go-gin-mvc没什么关系。 我是想将数据处理的service注入到gin的上下文里, 这样直接可以使用 c.Service.GetUserOne(1)获取数据, 不用每次使用的时候都new一次service
2020-01-03
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程