欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang依賴注入工具digo的使用詳解

 更新時間:2023年06月02日 10:42:50   作者:werben  
這篇文章主要為大家詳細介紹了Golang中依賴注入工具digo的使用,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起學習一下

digo工具地址:https://github.com/werbenhu/digo

特性

  • 使用注釋中的注解
  • 自動代碼生成
  • 自動檢測循環(huán)依賴
  • 編譯時期依賴注入
  • 自動初始化
  • 支持實例組的管理

快速開始

更多示例請參考:examples

編寫代碼和注解

package main

import (
	"log"

	"github.com/werbenhu/digo"
)

// @provider({"id":"main.db.url"})
func NewDbUrl() string {
	return "localhost:3306"
}

type Db struct {
	url string
}

// @provider({"id":"main.db"})
// @inject({"param":"url", "id":"main.db.url"})
func NewDb(url string) *Db {
	return &Db{
		url: url,
	}
}

type App struct {
	Db *Db
}

// @provider({"id":"main.app"})
// @inject({"param":"db", "id":"main.db"})
func NewApp(db *Db) *App {
	return &App{
		Db: db,
	}
}

func (a *App) Start() {
	log.Printf("app strat, db:%s\n", a.Db.url)
}

func main() {
	app, err := digo.Provide("main.app")
	if err == nil {
		app.(*App).Start()
	}
}

安裝digogen工具

go install github.com/werbenhu/digo/digogen@v1.0.0

生成依賴注入代碼

打開命令行執(zhí)行下面命令,digogen將會根據(jù)注解自動生成digo.generated.go源碼文件.

digogen

運行代碼

go run .\digo.generated.go .\main.go

注解詳情

@provider

@provider注解表示是一個實例提供者,該實例是一個單例

示例

// @provider({"id":"main.db"})

支持的參數(shù):

參數(shù)類型是否必需說明
idstring實例的id

如果獲取實例,通過digo.Provide(providerId)可以獲取到某一個provider的實例

app, err := digo.Provide("main.app")
if err == nil {
	app.(*App).Start()
}

@inject

@inject注解表示注入一個實例到某個參數(shù), @inject注解必須和@provider或者@group二者中的一個同時存在.

示例

// @inject({"param":"db", "id":"main.db"})

支持的參數(shù):

參數(shù)類型是否必需說明
paramstring指明哪個參數(shù)需要注入實例
idstring指明需要注入的實例id
pkgstring該參數(shù)需要引入特定的包

pkg在什么時候需要使用,比如我們需要引入一個包 github.com/xxx/tool/v1 , 我們使用包名的時候是這樣使用的 *tool.Struct, 而不是 *v1.Struct,那我們需要顯示指明需要導(dǎo)入github.com/xxx/tool/v1

// @inject({"param":"tool", "id":"main.tool", "pkg":"github.com/xxx/tool/v1"})

@group

@group注解表示將實例注冊到一個組

示例

// @group({"id":"main.controllers"})

支持的參數(shù):

參數(shù)類型是否必需說明
idstring組的id

如果獲取組的所有實例,通過digo.Members(groupId)可以獲取到組的所有實例

ctrls, err := digo.Members("main.controllers")
if err == nil {
    for _, controller := range ctrls {
        // TODO:
    }
}

到此這篇關(guān)于Golang依賴注入工具digo的使用詳解的文章就介紹到這了,更多相關(guān)Golang依賴注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang?JSON技巧小結(jié)

    golang?JSON技巧小結(jié)

    本文介紹了在Go語言中使用JSON時的一些小技巧,包括如何將字符串轉(zhuǎn)換為數(shù)字、臨時忽略空字段、臨時添加額外字段、粘合兩個struct、改名struct字段、支持不同類型的數(shù)字,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • go通過編碼縮短字符串的長度實現(xiàn)方法步驟

    go通過編碼縮短字符串的長度實現(xiàn)方法步驟

    這篇文章主要為大家介紹了go通過編碼縮短字符串的長度實現(xiàn)方法步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • GO語言實現(xiàn)列出目錄和遍歷目錄的方法

    GO語言實現(xiàn)列出目錄和遍歷目錄的方法

    這篇文章主要介紹了GO語言實現(xiàn)列出目錄和遍歷目錄的方法,涉及ioutil.ReadDir()與filepath.Walk()的應(yīng)用,是非常實用的技巧,需要的朋友可以參考下
    2014-12-12
  • Golang測試框架goconvey進行單元測試流程介紹

    Golang測試框架goconvey進行單元測試流程介紹

    goconvey是一款針對Golang的測試框架,可以管理和運行測試用例,同時提供了豐富的斷言函數(shù),并支持很多Web界面特性,這篇文章主要介紹了使用goconvey進行單元測試流程,感興趣的同學可以參考下文
    2023-05-05
  • Go中Vendo機制的使用

    Go中Vendo機制的使用

    自Go1.6起,Go語言正式啟用vendor機制,允許將項目依賴放入項目內(nèi)的vendor目錄,類似私有GOPATH,本文就來介紹一下Vendo機制的使用,感興趣的可以了解一下
    2024-10-10
  • Golang函數(shù)這些神操作你知道哪些

    Golang函數(shù)這些神操作你知道哪些

    這篇文章主要為大家介紹了一些Golang中函數(shù)的神操作,不知道你都知道哪些呢?文中的示例代碼講解詳細,具有一定的學習價值,需要的可以參考一下
    2023-02-02
  • golang判斷key是否在map中的代碼

    golang判斷key是否在map中的代碼

    這篇文章主要介紹了golang判斷key是否在map中的代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 深度剖析Golang如何實現(xiàn)GC掃描對象

    深度剖析Golang如何實現(xiàn)GC掃描對象

    這篇文章主要為大家詳細介紹了Golang是如何實現(xiàn)GC掃描對象的,文中的示例代碼講解詳細,具有一定的學習價值,需要的小伙伴可以參考一下
    2023-03-03
  • 在Go中實現(xiàn)高效可靠的鏈路追蹤系統(tǒng)

    在Go中實現(xiàn)高效可靠的鏈路追蹤系統(tǒng)

    在當今互聯(lián)網(wǎng)應(yīng)用的架構(gòu)中,分布式系統(tǒng)已經(jīng)成為主流,分布式系統(tǒng)的優(yōu)勢在于能夠提供高可用性、高并發(fā)性和可擴展性,本文將介紹鏈路追蹤的概念和原理,并重點介紹如何在Golang中實現(xiàn)高效可靠的鏈路追蹤系統(tǒng),需要的朋友可以參考下
    2023-10-10
  • 如何在Go中使用Casbin進行訪問控制

    如何在Go中使用Casbin進行訪問控制

    這篇文章主要介紹了如何在Go中使用Casbin進行訪問控制,Casbin是一個強大的、高效的開源訪問控制框架,其權(quán)限管理機制支持多種訪問控制模型,Casbin只負責訪問控制
    2022-08-08

最新評論