Gone 一個基於 Golang 的輕量級依賴注入框架

Gone 一個基於 Golang 的輕量級依賴注入框架

Gone 首先是一個輕量的,基於 Golang 的,依賴注入框架,靈感來源於 Java 中的 Spring Framework;其次,Gone 框架中包含了一系列內置組件,通過這些組件提供一整套 Web 開發方案,提供服務配置、日誌追蹤、服務調用、數據庫訪問、消息中間件等微服務常用能力。

文檔

使用示例

下面使用 Gone 來編寫一個 Web 服務吧!

package main

import (
    "fmt"
    "github.com/gone-io/gone"
    "github.com/gone-io/gone/goner"
)

// 實現一個Goner,什麼是Goner? => https://goner.fun/zh/guide/core-concept.html#goner-%E9%80%9D%E8%80%85
type controller struct {
    gone.Flag //goner 標記,匿名嵌入後,一個結構體就實現了Goner
    gone.RouteGroup `gone:"gone-gin-router"` //注入根路由
}

// 實現 Mount 方法,掛載路由;框架會自動執行該方法
func (ctr *controller) Mount() gone.GinMountError {

    // 定義請求結構體
    type Req struct {
        Msg string `json:"msg"`
    }

    //註冊 `POST /hello` 的 處理函數
    ctr.POST("/hello", func(in struct {
        to  string `gone:"http,query"` //注入http請求Query參數To
        req *Req   `gone:"http,body"`  //注入http請求Body
    }) any {
        return fmt.Sprintf("to %s msg is: %s", in.to, in.req.Msg)
    })

    return nil
}

func main() {
    //啓動服務
    gone.Serve(func(cemetery gone.Cemetery) error {
        // 調用框架內置組件,加載gin框架
        _ = goner.GinPriest(cemetery)

        //將 一個controller類型的Goner埋葬到墓園
        //埋葬是什麼意思? => https://goner.fun/zh/guide/core-concept.html#bury-%E5%9F%8B%E8%91%AC
        //墓園是什麼意思? => https://goner.fun/zh/guide/core-concept.html#cemetery-%E5%A2%93%E5%9B%AD
        cemetery.Bury(&controller{})
        return nil
    })
}

運行上面代碼:go run main.go,程序將監聽 8080 端口,使用 curl 測試:

curl -X POST 'http://localhost:8080/hello' \
    -H 'Content-Type: application/json' \
    --data-raw '{"msg": "你好呀?"}'

結果如下:

{"code":0,"data":"to  msg is: 你好呀?"}
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ddg1faTGkTwMtOhF2sxd8A