当前位置:网站首页>Go learning - dependency injection
Go learning - dependency injection
2022-07-06 00:15:00 【Duck boss】
One 、 Dependency injection
package main
import "fmt"
func a1() {
fmt.Println("a1 call ")
}
func a2() {
fmt.Println("a2 call ")
}
func main() {
// adopt map Implement dependency injection
myMap := make(map[string]func())
myMap["a1"] = a1
myMap["a2"] = a2
// adopt map Of key Call function
myMap["a1"]()
myMap["a2"]()
}
Two 、 Dependency injection framework
Download third party packages
3、 ... and 、 Use inject Call function
package main
import (
"fmt"
"github.com/codegangsta/inject"
)
type S1 interface {}
type S2 interface {}
func Format(name string,company S1,level S2,age int) {
fmt.Printf("name = %s,company = %s,level = %s,age = %d!\n",name,company,level,age)
}
func main() {
// Create a control instance
injector := inject.New()
// Parameter injection
injector.Map("tom")
injector.MapTo("tencent",(*S1)(nil))
injector.MapTo("T4",(*S2)(nil))
injector.Map(12)
// Reverse call function
injector.Invoke(Format)
}
Four 、inject Operating structure
package main
import (
"fmt"
"github.com/codegangsta/inject"
)
type S1 interface {}
type S2 interface {}
type Staff struct {
Name string `inject`
Company S1 `inject`
Level S2 `inject`
Age int `inject`
}
func main() {
staff := Staff{}
// Create a control instance
injector := inject.New()
// Parameter injection
injector.Map("tom")
injector.MapTo("tencent",(*S1)(nil))
injector.MapTo("T4",(*S2)(nil))
injector.Map(12)
// Reverse call function
injector.Apply(&staff)
fmt.Println(staff)
}
5、 ... and 、 Grab information
package main
import (
"fmt"
"github.com/codegangsta/inject"
)
type S1 interface {}
func main() {
fmt.Println(inject.InterfaceOf((*interface{})(nil)))
fmt.Println(inject.InterfaceOf((*S1)(nil)))
}
边栏推荐
- Global and Chinese markets of POM plastic gears 2022-2028: Research Report on technology, participants, trends, market size and share
- Wechat applet -- wxml template syntax (with notes)
- 妙才周刊 - 8
- 多普勒效應(多普勒頻移)
- 硬件及接口学习总结
- Global and Chinese market of water heater expansion tank 2022-2028: Research Report on technology, participants, trends, market size and share
- Key structure of ffmpeg -- AVCodecContext
- SQLServer连接数据库读取中文乱码问题解决
- Hardware and interface learning summary
- 时区的区别及go语言的time库
猜你喜欢
Browser local storage
FFT learning notes (I think it is detailed)
软件测试工程师必会的银行存款业务,你了解多少?
如何解决ecology9.0执行导入流程流程产生的问题
权限问题:source .bash_profile permission denied
单商户V4.4,初心未变,实力依旧!
OS i/o devices and device controllers
Gd32f4xx UIP protocol stack migration record
Atcoder beginer contest 254 [VP record]
【NOI模拟赛】Anaid 的树(莫比乌斯反演,指数型生成函数,埃氏筛,虚树)
随机推荐
Gd32f4xx UIP protocol stack migration record
openssl-1.0.2k版本升级openssl-1.1.1p
多普勒效應(多普勒頻移)
Key structure of ffmpeg -- AVCodecContext
Global and Chinese market of water heater expansion tank 2022-2028: Research Report on technology, participants, trends, market size and share
[day39 literature extensive reading] a Bayesian perspective on magnetic estimation
云呐|固定资产管理系统功能包括哪些?
【luogu CF487E】Tourists(圆方树)(树链剖分)(线段树)
Start from the bottom structure and learn the introduction of fpga---fifo IP core and its key parameters
数据库遇到的问题
MySql——CRUD
关于slmgr命令的那些事
QT -- thread
Add noise randomly to open3d point cloud
[gym 102832h] [template] combination lock (bipartite game)
Configuring OSPF GR features for Huawei devices
FFmpeg学习——核心模块
Senparc.Weixin.Sample.MP源码剖析
Hardware and interface learning summary
Atcoder beginer contest 254 [VP record]