日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【go】wire的具体各类用法

發(fā)布時間:2023/12/31 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 【go】wire的具体各类用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文僅記錄wire的具體使用方法, 而wire這個工具的作用, 功能和優(yōu)缺點不再贅述

wire的github地址: https://github.com/google/wire

demo中struct依賴關系

場景一 成員變量是結構體類型

用法一: 直接通過各struct的new函數(shù)拼裝

自定義了所有struct的new函數(shù), 通過wire.Build()組裝

func InitService1() *Service {
    wire.Build(NewService1, NewRemoteCallA, NewRemoteCallB)
    return &Service{}
}

用法二: 使用ProviderSet(可包含大于等于1個new函數(shù))

將New函數(shù)放到ProviderSet里, 再傳到wire.Build函數(shù)內

var RemoteCallSet = wire.NewSet(NewRemoteCallA, NewRemoteCallB)
func InitService2() *Service {
    wire.Build(NewService1, RemoteCallSet)
    return &Service{}
}

ProviderSet里可以是其他ProviderSet 千層餅一樣嵌套下去

用法三: 最上層struct不需要提供new函數(shù), 以wire.Struct代替

使用wire.Struct() 代替最終要生產的struct的New函數(shù)

第二個參數(shù) "*" 表示所有字段都進行初始化

wire.Value() 作用是將值轉化為一個ProviderSet, 以滿足wire.Build()入?yún)㈩愋?/p>

func InitService3() *Service {
    wire.Build(wire.Struct(new(Service), "*"), NewRemoteCallA, NewRemoteCallB, wire.Value("a"))
    return &Service{}
}

用法四: wire.Struct 指定具體字段

wire.Struct() 不使用 "*" 而是指定具體字段名

func InitService4() *Service {
    wire.Build(wire.Struct(new(Service), "remoteCallA"), NewRemoteCallA)
    return &Service{}
}

func InitService5(rb *RemoteCallB, c string) *Service { wire.Build(wire.Struct(new(Service), "*"), NewRemoteCallA) return &Service{} }

需要注意的是結構體里不能有相同類型的兩個及以上的字段, 如:

type Service struct {
  a string
  b string
  // ... 其他字段
}

是不允許的, 解決方法就是使用類型別名解決沖突, 會報錯

provider struct has multiple fields of type string

場景二: 成員變量為interface類型

用法一: 使用返回interface的new函數(shù)

func InitService7() *Service2 {
    wire.Build(wire.Struct(new(Service2), "*"), NewRemoteCallInterface, wire.Value("a"))
    return &Service2{}
}

用法二: 使用ProviderSet, 將具體struct的New函數(shù)綁定到interface上

var RemoteCallASet = wire.NewSet(NewRemoteCallA, wire.Bind(new(RemoteCall), new(*RemoteCallA)))
func InitService8() *Service2 {
    wire.Build(wire.Struct(new(Service2), "*"), RemoteCallASet, wire.Value("a"))
    return &Service2{}
}	
```[]()

總結

以上是生活随笔為你收集整理的【go】wire的具体各类用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区在线免费观看视频 | 精品人伦一区二区三区蜜桃网站 | 色噜噜色综合 | 91国产在线免费观看 | 亚洲av无码精品一区二区 | 久久久91精品国产一区二区三区 | 精品丰满人妻无套内射 | 色婷亚洲| 在线一区av | 这里只有精品在线观看 | 国产露脸91国语对白 | 小柔好湿好紧太爽了国产网址 | 国产成人毛毛毛片 | 国产视频一二三 | av女大全列表 | 狠狠爱视频 | 欧美乱妇18p| 99久久99九九99九九九 | 久久精品人妻一区二区 | 精品一二三区久久aaa片 | 男女激情久久 | 国产91福利 | 久久成人精品一区二区 | 日日噜噜噜噜久久久精品毛片 | 精品人妻在线视频 | 日韩在线观看免费 | 亚洲h视频在线观看 | 亚洲va在线 | 欧美怡红院视频一区二区三区 | 精品久久精品久久 | 成年人免费高清视频 | 欧美成人精品欧美一 | 日韩女女同性aa女同 | 国内性爱视频 | 欧美日本一区 | 国产天堂在线观看 | 韩国成人理伦片免费播放 | 女婴高潮h啪啪 | 欧美36p| 歪歪6080| 国产精品88久久久久久妇女 | 蕾丝视频污 | 成人综合一区二区 | 欧美精品成人一区二区在线观看 | 一区二区三区小视频 | 免费看的黄色 | 欧美 日韩 国产 一区 | 在线欧美日韩国产 | 午夜影院h | 秋霞影院午夜老牛影院 | 激情综合区 | 国产高清片 | 婷婷综合在线 | 免费看片色 | 依人成人综合网 | 国产盗摄在线观看 | 久久综合五月 | 欧美大片免费在线观看 | 男女无遮挡网站 | bangbros性欧美18 | 美女扒开尿口给男人看 | 国产精品热久久 | 依依成人在线 | 国产视频一级 | 国产视频综合在线 | av免费在线观看不卡 | 青草国产视频 | 日韩精品在线免费视频 | 性欧美bb | 美女福利视频在线 | 亚洲男人皇宫 | 亚洲精品美女久久久 | 成人动漫在线观看视频 | 日本55丰满熟妇厨房伦 | 国产美女福利 | 色桃av | 国产日韩中文 | 我要看18毛片 | 午夜精品视频一区二区三区在线看 | 宅男噜噜噜| 国产一级一级片 | 欧美 亚洲 视频 | 亚洲精品嫩草 | 国产女人18毛片 | 亚洲自拍电影 | 操少妇视频 | 国产精品日韩专区 | 亚洲综合大片69999 | a在线观看免费 | 精品国产黄 | 青草青视频 | 美女赤身免费网站 | 玉蒲团在线 | 国产夜色精品一区二区av | 噜噜吧噜噜色 | www.操.com| 又色又爽又黄无遮挡的免费视频 | av在线免费观看不卡 | 男女啪啪免费 |