Переглянути джерело

fix(internal/service): 修复后端数据格式化时的并发安全问题

- 在 FormatBackendData 函数中,使用临时副本修改 map元素,避免直接修改迭代的 map
- 将修改后的副本重新赋值给原始 map,确保数据一致性
- 优化代码结构,提高并发安全性
fusu 2 місяців тому
батько
коміт
66f0cda8d9
1 змінених файлів з 6 додано та 3 видалено
  1. 6 3
      internal/service/formatter.go

+ 6 - 3
internal/service/formatter.go

@@ -49,9 +49,12 @@ type formatterService struct {
 
 func (service *formatterService) FormatBackendData(ctx context.Context, req *v1.GameShieldBackendArrayRequest, oldFormat map[string]v1.SendGameShieldBackend, keyCounter int) (string, error) {
 	formData, err := service.TidyFormatBackendData(ctx, req, keyCounter)
-	for _, v := range formData {
-		v.Type = ""
-		v.Remark = ""
+	for k := range formData {
+		// 获取副本
+		tempItem := formData[k]
+		tempItem.Type = ""
+		tempItem.Remark = ""
+		formData[k] = tempItem // 将修改后的副本存回 map
 	}
 	if err != nil {
 		return "", err