找回密码
 立即注册
查看: 321|回复: 0

iris 框架依赖注入使用

[复制链接]
发表于 2022-6-20 15:46 | 显示全部楼层 |阅读模式
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服务

packagemain

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

funcmain(){
app:=iris.New()
app.Use(iris.Compression)

app.Get("/",func(ctxiris.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

typeSignRequestModelstruct{
Emailstring`json:"email"`
PassWordstring`json:"pass_word"`
}

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

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

funcmain(){
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 Applicationiris.ContextCurrent Iris Context*sessions.SessionCurrent Iris Sessioncontext.Contextctx.Request().Context()*http.Requestctx.Request()http.ResponseWriterctx.ResponseWriter()http.Headerctx.Request().Headertime.Timetime.Now()string,int, int8, int16, int32, int64,uint, uint8, uint16, uint32, uint64,float, float32, float64,bool,slicePath ParameterStructRequest BodyofJSON,XML,YAML,Form,URL Query,Protobuf,MsgPack

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-26 10:19 , Processed in 0.131797 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表