日韩性视频-久久久蜜桃-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蜜桃传媒精品久久久一区二区 | 色婷婷久久一区二区三区麻豆 | 一卡二卡三卡在线 | 四虎综合 | 6699av| 爱如潮水3免费观看日本高清 | av黄色免费 | 欧美日韩另类视频 | 日本女人毛片 | 日韩中文字幕av电影 | 瑟瑟av| 五月天小说网 | 一级视频毛片 | 日韩精品人妻一区二区中文字幕 | 国产乱人乱偷精品视频a人人澡 | 欧美第一网站 | 国产精品高清无码 | 久久久久久久久久久久久久国产 | 国产卡一卡二卡三无线乱码新区 | 第一福利在线视频 | 玖色视频 | 另类一区 | 超碰蜜臀 | 欧美日韩色| 午夜小电影 | 欧美激情精品久久久久久蜜臀 | 鲁啊鲁在线视频 | 四虎精品在线 | 免费在线看污 | 国产综合精品 | 国产亚洲精品av | 欧美在线观看www | 欧美成人福利 | 免费精品视频 | 午夜神器在线观看 | 热久久最新网址 | 国产精品久久一区 | 欧美 日韩 国产 亚洲 色 | 特级大胆西西4444人体 | 亚洲激情文学 | 国产小视频免费在线观看 | 少妇毛片视频 | 9999国产精品 | 亚洲www视频| 狠狠爱免费视频 | 亚洲涩色 | 黄色a级片视频 | 国产成人精品女人久久久 | 国产成人无码精品亚洲 | 加勒比久久综合 | 一个人免费在线观看视频 | 久久男女视频 | 丁香色欲久久久久久综合网 | 国产无遮挡又黄又爽又色 | 亚洲成人精选 | 国产 日韩 一区 | 怡红院一区二区三区 | 国产黄色免费在线观看 | 日韩 在线 | 日韩六十路 | 国产欧美日韩综合精品一区二区 | 亚洲精品男人天堂 | jlzzjlzz亚洲女人18 | 亚洲精品视频导航 | 韩国三级中文字幕 | 性盈盈影院中文字幕 | 日本黄色免费视频 | 国产97免费视频 | 精品人妻一区二区三 | 光棍影院一区二区 | 色婷婷电影网 | av中文在线天堂 | 国产精品无码专区av免费播放 | 性国产精品 | 美女又黄又免费的视频 | 九九影视理伦片 | 一级片中文字幕 | 精品人妻视频在线 | 日韩99 | www日日日 | 午夜激情久久久 | 国产欧美综合视频 | 黄色大片免费观看视频 | 久久精品91 | 秋葵视频污 | 天天爱天天做天天爽 | 国产福利免费视频 | 国产在线观看成人 | 国产精品一区二区三区免费在线观看 | 成人在线免费视频播放 | 国产一区二区黄色 | 黑人巨大精品欧美黑白配亚洲 | 91视频国产一区 | 国产一级淫片免费 | 成人在线国产精品 | 天堂网av在线 |