我有一个结构体,其中有许多“公共”方法,我需要保持线程安全。
package main
import "sync"
type Test struct {
sync.Mutex
privateInt int
privateString string
privateMap map[string]interface{}
}
func (p *Test) A() {
p.Lock()
defer p.Unlock()
// do something that changes the fields...
}
func (p *Test) B() {
p.Lock()
defer p.Unlock()
// do something that changes the fields...
}
func (p *Test) C() {
p.Lock()
defer p.Unlock()
// do something that changes the fields...
}
func (p *Test) D() {
p.Lock()
defer p.Unlock()
// do something that changes the fields...
}
// and so on
字符串
如果结构体有很多方法,我必须检查并确认每个方法都执行锁。看起来有点傻。
1条答案
按热度按时间arknldoa1#
我想到了一个类似数据库的方法。我用另一个结构体TestProvider Package 了结构体Test,并且在使用Test之前必须调用Transaction()来获取指针。
字符串
这很好,但我认为可能有更好的方法。