bson.M это
map, это ссылочный тип. Когда вы передаете
map аргументом в функцию вы передаете ссылку на участок памяти. Соответственно при конкурентном доступе к этому участку и возникает ошибка. Вам следует либо защитить этот участок примитивами синхронизации вроде
sync.Mutex либо передавать в функцию не map, а копию. Например (в коде из вашего комментария)
func SiteController(w http.ResponseWriter, r *http.Request) {
bsonQuery := bson.M{}
if node.Params.ExtendFilter != nil { //node.Params.ExtendFilter глобальная переменная
//следует не просто взять ссылку на нее
//bsonQuery = node.Params.ExtendFilter
//а сделать копию для безопасного конкурентного использования
for key, value := range node.Params.ExtendFilter{
bsonQuery[key] = value
}
}
....
doc, err := documents.GetDocumentFrontend(bsonQuery, true)
}