后端开发
未读Golang并发度控制在Golang中可以通过channel去控制goroutine的并发度
举个例子:
12345678910111213141516171819202122232425262728293031package mainimport ( "fmt" "sync" "time")func main() { var wg sync.WaitGroup concurrence := 2 semaphore := make(chan struct{}, concurrence) startTime := time.Now() for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { defer wg.Done() // 抢占一个并发槽位 semaphore <- struct{}{} // 模拟任务执行 fmt.Printf("Task ...
Wire实现Golang依赖注入一、什么是依赖注入简单来说,就是在项目开发中,我们经常遇到一直情况,实例A的创建会依赖于实例B的创建,并且在实例A的生命周期内,持有对实例B的访问权限。
二、为什么要使用依赖注入如果不适用依赖注入的话会有以下风险:
全局变量⼗分不安全,存在覆写的可能。
资源散落在各处,可能重复创建,浪费内存,后续维护能⼒极差。
提⾼循环依赖的⻛险。
全局变量的引⼊提⾼单元测试的成本
在使用依赖注入后,可以方便我们的代码进行维护。
三、Golang依赖注入目前来说我的解决方案是通过Google的Wire去实现Golang依赖注入
Wire对比与其他在运行阶段依靠反射实现依赖注入的方式来说,优势在于能在编译期实现依赖注入,如果依赖注⼊有问题,那么在代码⽣成时就会抛出异常,并不会拖到运⾏时暴露,更便于我们进行debug。
3.1 安装Wire1go install github.com/google/wire/cmd/wire@latest
3.2 代码实现123456789101112131415161718func initWebServer() *gin.Engi ...