使用包级变量并不总是好的或总是坏的。视问题而定。
关于这个特定的代码示例,唯一的一点是您可能会在代码中的多个位置锁定和解锁。
如果你选择走这条路,这是好的,考虑提取
tplPath
和
mutex
成为一种。
// create type and expose values through getters and setters
// to ensure the mutex logic is encapsulated.
type path struct {
mu sync.Mutex
val string
}
func (p *path) setPath(path string) {
p.mu.Lock()
defer p.mu.Unlock()
p.val = path
}
func (p *path) path() string {
p.mu.Lock()
defer p.mu.Unlock()
return p.val
}
var tplPath *path
func init() {
// use package init to make sure path is always instantiated
tplPath = new(path)
}
func Prepare(c *gin.Context) {
tplPath.setPath("abc")
}