记go-validator组件在并发时候崩溃

在一个gin项目中使用到了github.com/go-playground/validator/v10和github.com/go-playground/validator/v10/translations/zh

发现个很有意思的事情,如果我使用了translation中间件,在并发超过5的时候,项目就直接崩溃

通过打印堆栈日志发现在go-playground/validator/v10@v10.4.1/validator_instance.go:257到265行

if v.transTagFunc == nil {
    v.transTagFunc = make(map[ut.Translator]map[string]TranslationFunc)
}

if err = registerFn(trans); err != nil {
    return
}

m, ok := v.transTagFunc[trans]

这段注册translation的代码中使用到了线程不安全的map 并发情况下会有concurent write的报错    

修改方案:

不使用translation中间件了

记go-validator组件在并发时候崩溃

上一篇:[LeetCode] 1162. As Far from Land as Possible 地图分析


下一篇:WAL writer process(预写式日志写)