go-mir v2.0.0 發布,用 Go 結構體標籤定義 handler 路由信息的...

2020-12-25 開源中國

go-mir v2.0.0 發布了,推薦使用。

功能特性:

開發詳情

與版本 v1不同,版本v2採用代碼生成的方式從定義的結構體標籤信息生成handler接口,開發者實現相應接口完成Web API的功能,非常漂亮的支持了基於接口編程的範式。

go-mir v1的架構大體是這樣:

這套架構主要是使用了golang的反射機制對struct tag解析然後註冊路由信息到web engine,只影響啟動時間,不會有運行時損耗,總體來說,方便了接口定義,對代碼組織很有益處。

go-mir v2版本大體架構如下:

v2版本升級採用代碼生成的方式生成接口代碼,同樣也是採用golang內置的struct tag定義路由信息;不同於v1版本在引擎啟動時解析後註冊路由信息到web引擎,這裡參考grpc的接口生成方式,生成接口定義文件,業務邏輯只要實現了接口,註冊接口實現的對象到相應的web引擎,啟動後就可以對外通過RESTfull接口獲取服務。

代碼示例:(eg: gin style)

% go get github.com/alimy/mir/mirc/v2@latest% mirc new -d mir-examples% tree mir-examplesmir-examples├── Makefile├── README.md├── go.mod├── main.go└── mirc ├── main.go └── routes ├── site.go ├── v1 │   └── site.go └── v2 └── site.go% cd mir-examples% make generate

// file: mirc/routes/site.gopackage routesimport "github.com/alimy/mir/v2"// Site mir's struct tag definetype Site struct { Chain mir.Chain `mir:"-"` Index mir.Get `mir:"/index/"` Articles mir.Get `mir:"/articles/:category/"`}

定義生成器入口,比如

% cat mirc/main.gopackage mainimport ( "log" "github.com/alimy/mir/v2/core" "github.com/alimy/mir/v2/engine" routes "github.com/alimy/mir/v2/examples/mirc/routes" v1 "github.com/alimy/mir/v2/examples/mirc/routes/v1" v2 "github.com/alimy/mir/v2/examples/mirc/routes/v2")//go:generate go run main.gofunc main() { log.Println("generate code start") entries := mirEntries() opts := &core.Options{ GeneratorName: core.GeneratorGin, GeneratorOpts: core.InitOpts{ core.OptSinkPath: "./gen", }, } if err := engine.Generate(entries, opts); err != nil { log.Fatal(err) } log.Println("generate code finish")}func mirEntries() []interface{} { return []interface{}{ new(routes.Site), new(v1.Site), new(v2.Site), }}

  • 自動生成接口,基於上面的定義,生成器將自動生成接口定義文件,如下:

% make generate% cat mirc/gen/api/site.go// Code generated by go-mir. DO NOT EDIT.package apiimport ( "github.com/gin-gonic/gin")// Site mir's struct tag definetype Site interface { Chain() gin.HandlersChain Index(c *gin.Context) Articles(c *gin.Context)}// RegisterSiteServant register site to ginfunc RegisterSiteServant(e *gin.Engine, s Site) { router := e // use chain for router middlewares := s.Chain() router.Use(middlewares...) // register route info to router router.Handle("GET", "/index/", s.Index) router.Handle("GET", "/articles/:category/", s.Articles)}

package mainimport ( "log" "github.com/gin-gonic/gin" "github.com/alimy/mir/v2/examples/mirc/gen/api" "github.com/alimy/mir/v2/examples/mirc/gen/api/v1" "github.com/alimy/mir/v2/examples/mirc/gen/api/v2" "github.com/alimy/mir/v2/examples/servants")func main() { e := gin.New() // register servants to engine registerServants(e) // start servant service if err := e.Run(); err != nil { log.Fatal(err) }}func registerServants(e *gin.Engine) { // register default group routes api.RegisterSiteServant(e, servants.EmptySiteWithNoGroup{}) // register routes for group v1 v1.RegisterSiteServant(e, servants.EmptySiteV1{}) // register routes for group v2 v2.RegisterSiteServant(e, servants.EmptySiteV2{})}

% make run

相關焦點

  • Sentinel Go 0.6.0 發布,支持 Warm-Up 預熱流控
    Sentinel Go 0.6.0 正式發布,該版本帶來了 Warm-Up 預熱流控特性、go-micro 框架的適配模塊,以及其它的一些特性改進
  • gf-cli v0.7.4 發布,GoFrame 開發工具鏈
    version 工具版本查看使用方式:用以查看當前gf命令行工具編譯時的版本信息。例如:$ gf -vGoFrame CLI Tool v0.7.4, https://goframe.orgInstall Path: /usr/local/bin/gfBuild Detail: Go Version: go1.14 GF Version: v1.12.2 Git Commit: bd19f7af64f9d34fac2d4d10043ff8020a1ec74a
  • dubbogo 3.0:牽手 gRPC 走向雲原生時代
    dubbogo 社區 2020 年勠力打造三支箭:已經發布的對齊 dubbo 2.7 的 dubbogo v1.5 版本;近期將要發布的 sidecar 形態的 dubbo-go-proxy 項目;以及處於進行時的 dubbogo 3.0
  • Jenkins CLI 命令行 v0.0.27
    在本次更新中,利用 GitHub Action 和 GoReleaser 實現了自動化版本發布。
  • Kratos v0.1.0 發布,B 站之 Go 微服務框架
    經過兩個月的更新迭代,Kratos v0.1.0 已經正式發布了。Kratos是bilibili開源的一套Go微服務框架,包含大量微服務相關框架及工具。
  • V (Vlang) 首個主要版本 0.2 發布,安全快速可編譯的靜態語言
    V (Vlang) 0.2 發布了,作者宣布這是首個主要版本,更新重點是提升穩定性和優化編譯時(compile-time)內存管理。
  • PHP 框架 Blink 0.3 發布,新增插件機制及路由分組功能
    主要特性:依賴注入與服務定位器路由,良好的 RESTful 支持登錄與認證機制Session 管理Request 與 Response 中間件插件架構良好的測試支持此次發布的 0.3 版是 Blink 的一個主要發布版本,包含如下幾個新特性:1、插件架構
  • GoCD 21.1.0 發布,持續集成和發布管理系統
    GoCD 21.1.0 已發布,GoCD 是一個持續集成和發布管理系統,其前身為 CruiseControl,它是 ThoughtWorks 在做諮詢和交付項目時研發的一款開源持續集成工具。
  • go-zero 1.1.2 發布,web 和 rpc 框架
    go-zero 1.1.2 發布了。go-zero 是一個集成了各種工程實踐的 web 和 rpc 框架。通過彈性設計保障了大並發服務端的穩定性,經受了充分的實戰檢驗。
  • MOSN v0.15.0 發布,雲原生網絡代理平臺
    MOSN 發布 V0.15.0 版本,具體變更如下:我們很高興的宣布 MOSN v0.15.0 發布,恭喜鄧茜
  • Go中的HTTP請求之——HTTP1.1請求流程分析
    在go中RoundTripper的定義為「執行單個HTTP事務的能力,獲取給定請求的響應」。sendsend函數會檢查request的URL,以及參數的rt, 和header值。如果URL和rt為nil則直接返回錯誤。同時, 如果請求中設置了用戶信息, 還會檢查並設置basic的驗證頭信息,最後調用rt.RoundTrip得到請求的響應。
  • Dcat Admin v2.0.0-beta 發布 - 全新擴展系統
    時隔多日,Dcat Admin 終於迎來了 2.0 的第一個版本,下面簡單介紹一下主要變化,歡迎大家安裝體驗,如果有問題會即時修復~安裝composer require dcat/laravel-admin:v2.0.0-beta -vvv 有什麼變化?
  • vue-element-admin v3.9.0 發布,後臺集成方案
    vue-element-admin v3.9.0 已發布,更新內容:refactor[tagsView]: 使用 el-scrollbar 替代之前的滾動方案 #995
  • TsDotaRPG v1.0.1 發布,Dota2 自定義遊戲開發模板
    TsDotaRPG v1.0.1 已發布。
  • Hamler 0.2 正式發布,基於 Erlang 與 Haskell 的程式語言
    我們在這裡很高興地和大家分享 Hamler 0.2 版本發布的消息!
  • 新增系統監控功能,JumpServer堡壘機v2.6.0發布
    12月21日,JumpServer開源堡壘機正式發布v2.6.0版本。該版本的新增功能包括:新增系統監控功能,方便監控各個組件健康狀態;支持通過Excel文件對資源進行導入/導出;支持手動修改資產信息配置;支持對指定資產進行批量推送系統用戶;以及統一社區版和企業版Release包。
  • 加農go
    加農go 購物消費 大小: 10.05M 版本: 1.0.10
  • PHP 開發框架 TimoPHP 1.7.0 版本發布
    PHP 開發框架 TimoPHP 1.7.0 發布了。
  • IT挑戰高薪必備Go語言常識-Go WEB框架
    如果你只是想寫一個自己用的小網站,或許你不需要框架,但如果你是要開發一個投入生產運營的WEB服務端,那你最好用一個成熟的WEB框架,那樣會少走很多彎路。當初設計beego的時候就考慮了功能模塊化,用戶即使不適用beego的http邏輯,也是可以在使用它的獨立模塊,例如你可以使用cache模塊來做你的緩存邏輯,使用日誌模塊來記錄你的操作信息,使用config模塊來解析你各種格式的文件,所以不僅僅在Beego開發中,你的socket遊戲開發中也是很有用的模塊,這也是Beego為什麼受歡迎的一個原因。
  • Lunar Markdown Editor v0.0.6.67 發布
    Lunar Markdown Editor v0.0.6.67 已經發布,此版本更新內容包括:通常情況下,工作區「Images~」文件夾下以「_」開頭的圖像文件會被自動複製到每個工作區