请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请教老师一个gin的问题?

请问,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回答

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

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 回复 有任何疑惑可以回复我~
  • 提问者 wlxz #1
    老师,这样会不会侵入太强了?
    回复 有任何疑惑可以回复我~ 2020-01-07 00:01:23
  • ccmouse 回复 提问者 wlxz #2
    担心侵入太强的话这里的Counter可以做成接口
    回复 有任何疑惑可以回复我~ 2020-01-12 11:54:48
  • 提问者 wlxz 回复 ccmouse #3
    还没学会,待我看了2-7章的视频 自己试试看。
    到时如果还是不会,再请教老师哈!~
    回复 有任何疑惑可以回复我~ 2020-01-12 23:58:25
乐只君子 2020-01-02 14:37:05

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 wlxz #1
    感谢你的回复!不过我的问题与这个go-gin-mvc没什么关系。
    我是想将数据处理的service注入到gin的上下文里,
    这样直接可以使用 c.Service.GetUserOne(1)获取数据,
    不用每次使用的时候都new一次service
    回复 有任何疑惑可以回复我~ 2020-01-03 04:50:41
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信