iris 框架依赖注入使用

本文介绍了golang的web框架iris,特别是其依赖注入特性。通过简单的代码示例展示了如何使用iris快速启动http服务,并列举了iris支持的多种功能,如HTTP/2、中间件、API版本管理等。此外,还提及了iris的依赖注入功能,允许开发者轻松注册和使用依赖对象。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

iris 框架依赖注入使用

介绍

golang开发web应用一般会选个web框架开始开发,web框架提供了丰富的功能和特性,非常方便易用

golang官方提供的http包也可以快速启动http服务,但它提供的功能很少,不支持请求拦截、错误处理、日志处理、请求参数校验等常见的开发问题

golang的web框架很多,大部分也都很好用,像iris、gin、echo等在github上都是20k+star的项目

今天介绍一下iris这个框架,为什么选这个框架,因为这个框架有个非常好的特性——依赖注入(DI)

github地址:https://github.com/kataras/iris

快速开始

下面是官方的例子,简单几行代码就可以启动http服务


package main

import "github.com/kataras/iris/v12"

func main() {
  app := iris.New()
  app.Use(iris.Compression)

  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("Hello <strong>%s</strong>!", "World")
  })

  app.Listen(":8080")
}

iris还支持其他很多特性,比如:

  • • HTTP/2(推送,甚至是嵌入式数据)

  • • 中间件(Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite)

  • • API版本管理

  • • MVC

  • • Websockets

  • • gRPC

  • • 独特的路由器,以动态路径作为参数,具有标准类型,如:uuid, :string, :int…和创建自己的能力

等,详情可以看官方文档

iris提供的这些功能,大部分web框架也都有支持

使用依赖注入(dependency injection

type SignRequestModel struct {
    Email string `json:"email"`
    PassWord string `json:"pass_word"`
}

//SignUp方法依赖db,req对象自动解析http请求的参数(application/json)
func SignUp(db *gorm.DB, req SignRequestModel) interface{} {
    user := &repository.User{}
    tx := db.Model(&repository.User{}).Where(&repository.User{Email: req.Email}).First(user)
    if err := tx.Error; err != nil {
        return util.FailureResponse(err)
    }
    if user == nil {
        //新注册
    } else {
        //已注册
    }
    return util.SuccessResponse("ok")
}

func container(api *iris.APIContainer) {
    //注入依赖
    api.RegisterDependency(db)
    api.Post("/sign/up", SignUp)
}

func main() {
    app := iris.New()
    app.Use(recover.New())
    app.Use(irisLog.New())

    //非mvc,函数调用
    app.Party("/api/v1").ConfigureContainer(container)

    port := 8080
    app.Listen(fmt.Sprintf(":%d", port), iris.WithOptimizations)
}

使用iris的依赖注入时,只需把依赖的对象通过 RegisterDependency 方法注册就可以使用了,非常方便简单

riis支持自动注入的对象还有很多,比如:

TypeMaps To
*mvc.ApplicationCurrent MVC Application
iris.ContextCurrent Iris Context
*sessions.SessionCurrent Iris Session
context.Contextctx.Request().Context()
*http.Requestctx.Request()
http.ResponseWriterctx.ResponseWriter()
http.Headerctx.Request().Header
time.Timetime.Now()
string,
int, int8, int16, int32, int64,
uint, uint8, uint16, uint32, uint64,
float, float32, float64,
bool,
slicePath Parameter
StructRequest Body of JSON, XML, YAML, Form, URL Query, Protobuf, MsgPack

详情参考:https://github.com/kataras/iris/wiki/dependency-injection

tip: 如果提示ConfigureContainer 对象不存在的话,执行 github.com/kataras/iris/v12@master

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值