依赖注入是软件工程中经常使用到的一种技术,它提供了一种控制反转的机制,把控制权利交给了调用方。调用方来决定使用哪些参数,哪些对象来进行具体的业务逻辑。 它有几个好处: 1 它让调用方更灵活。 2 大...
go
一种优雅的Golang的库插件注册加载机制
最近看到一个内部项目的插件加载机制,非常赞。当然这里说的插件并不是指的golang原生的可以在buildmode中加载指定so文件的那种加载机制。而是软件设计上的「插件」。如果你的软件是一个框架,或者一个平台性产品...
Golang的并发控制
我们考虑这么一种场景,协程A执行过程中需要创建子协程A1、A2、A3…An,协程A创建完子协程后就等待子协程退 出。针对这种场景,GO提供了三种解决方案: Channel: 使用channel控制子协程 WaitGroup : 使用信号...
Golang的RWMutex
前面我们聊了互斥锁Mutex,所谓读写锁RWMutex,完整的表述应该是读写互斥锁,可以说是Mutex的一个改进版, 在某些场景下可以发挥更加灵活的控制能力,比如:读取数据频率远远大于写数据频率的场景。 例如,程序...
Golang的mutex原理
互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了非常简单易用的Mutex,Mutex为一结构体类型,对外暴露两个方法Lock()和Unlock()分别用于加锁和解锁。 Mutex使用起来非常方便,但其内部...
Golang的并发编程(2)
channel channel是Go语言在语言级别提供的goroutine间的通信方式。 我们可以使用channel在两个或多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递...
Golang的并发编程(1)
在“序”中,我们已经描述过Go语言中最重要的一个特性,那就是go关键字。 优雅的并发编程范式,完善的并发支持,出色的并发性能是Go语言区别于其他语言的一大特色。使用Go语言开发服务器程序时,就需要对它的并发...
golang 中 channel 的详细使用、使用注意事项及死锁分析
golang 中 channel 的详细使用、使用注意事项及死锁分析 什么是 channel 管道# 它是一个数据管道,可以往里面写数据,从里面读数据。 channel 是 goroutine 之间数据通信桥梁,而且是线程安全的。 ch...
golang中锁Mutex非for循环里可以使用吗
在Go语言中,sync.Mutex是一种互斥锁,用于在多个goroutine中同步对共享资源的访问。如果你尝试在for循环之外使用Mutex,那么这个锁可能没有任何意义,因为它不会提供任何并发控制,因为在循环外部,没有其他goro...
go gorm 软删除和查询 及注意事项
软删除 如果您的模型包含了一个 gorm.deletedat 字段(gorm.Model 已经包含了该字段),它将自动获得软删除的能力! 拥有软删除能力的模型调用 Delete 时,记录不会从数据库中被真正删除。但 GORM 会将 Delete...