在一个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中间件了