iris 框架依賴注入使用

iris 框架依賴注入使用

介紹

golang開(kāi)發(fā)web應(yīng)用一般會(huì)選個(gè)web框架開(kāi)始開(kāi)發(fā),web框架提供了豐富的功能和特性,非常方便易用

golang官方提供的http包也可以快速啟動(dòng)http服務(wù),但它提供的功能很少,不支持請(qǐng)求攔截、錯(cuò)誤處理、日志處理、請(qǐng)求參數(shù)校驗(yàn)等常見(jiàn)的開(kāi)發(fā)問(wèn)題

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

今天介紹一下iris這個(gè)框架,為什么選這個(gè)框架,因?yàn)檫@個(gè)框架有個(gè)非常好的特性——依賴注入(DI)

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

快速開(kāi)始

下面是官方的例子,簡(jiǎn)單幾行代碼就可以啟動(dòng)http服務(wù)


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(推送,甚至是嵌入式數(shù)據(jù))

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

  • ??API版本管理

  • ??MVC

  • ??Websockets

  • ??gRPC

  • ??獨(dú)特的路由器,以動(dòng)態(tài)路徑作為參數(shù),具有標(biāo)準(zhǔn)類(lèi)型,如:uuid, :string, :int...和創(chuàng)建自己的能力

  • 等,詳情可以看官方文檔

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

    使用依賴注入(dependency injection

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

    //SignUp方法依賴db,req對(duì)象自動(dòng)解析http請(qǐng)求的參數(shù)(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?{
    ????????//新注冊(cè)
    ????}?else?{
    ????????//已注冊(cè)
    ????}
    ????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,函數(shù)調(diào)用
    ????app.Party("/api/v1").ConfigureContainer(container)

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

    使用iris的依賴注入時(shí),只需把依賴的對(duì)象通過(guò)?RegisterDependency?方法注冊(cè)就可以使用了,非常方便簡(jiǎn)單

    riis支持自動(dòng)注入的對(duì)象還有很多,比如:

    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 Body?of?JSON,?XML,?YAML,?Form,?URL Query,?Protobuf,?MsgPack

    詳情參考:https://github.com/kataras/iris/wiki/dependency-injection

    tip: 如果提示ConfigureContainer 對(duì)象不存在的話,執(zhí)行?github.com/kataras/iris/v12@master


    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
    【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
    平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

    相關(guān)閱讀更多精彩內(nèi)容

    友情鏈接更多精彩內(nèi)容