Quellcode durchsuchen

fixbug:修复map并发读写问题

zoie vor 2 Jahren
Ursprung
Commit
31b7c1b733
2 geänderte Dateien mit 17 neuen und 13 gelöschten Zeilen
  1. 10 8
      models/Account/Admin.go
  2. 7 5
      models/Account/Company.go

+ 10 - 8
models/Account/Admin.go

@@ -3,13 +3,12 @@ package Account
 import (
 	_ "github.com/astaxie/beego/cache/redis"
 	_ "github.com/go-sql-driver/mysql"
+	"sync"
 )
 
 var User_r *User
 var T_pid *int
 
-var AdminMap map[string]User // 泛型
-
 type User struct {
 	T_uuid  string `xml:"T_uuid"`
 	T_pid   int    `xml:"T_pid"`
@@ -21,21 +20,23 @@ type User struct {
 	T_wx    string `xml:"T_wx"`
 }
 
+var AdminMap *sync.Map // 泛型
+
 func init() {
-	AdminMap = make(map[string]User)
+	AdminMap = new(sync.Map)
 }
 
 func Read_Admin_All_Map(A []User) {
 	for _, v := range A {
-		AdminMap[v.T_uuid] = v
+		AdminMap.Store(v.T_uuid, v)
 	}
 }
 
 func Read_User_T_name_Get(T_uuid string) string {
 	// 有先加入 给全部人发消息
-	v, ok := AdminMap[T_uuid] /*如果确定是真实的,则存在,否则不存在 */
+	v, ok := AdminMap.Load(T_uuid) /*如果确定是真实的,则存在,否则不存在 */
 	if ok {
-		return v.T_name
+		return v.(User).T_name
 	} else {
 		return ""
 	}
@@ -43,9 +44,10 @@ func Read_User_T_name_Get(T_uuid string) string {
 
 func Read_User_T_phone_Get(T_uuid string) string {
 	// 有先加入 给全部人发消息
-	v, ok := AdminMap[T_uuid] /*如果确定是真实的,则存在,否则不存在 */
+	//v, ok := AdminMap[T_uuid] /*如果确定是真实的,则存在,否则不存在 */
+	v, ok := AdminMap.Load(T_uuid) /*如果确定是真实的,则存在,否则不存在 */
 	if ok {
-		return v.T_phone
+		return v.(User).T_phone
 	} else {
 		return ""
 	}

+ 7 - 5
models/Account/Company.go

@@ -1,5 +1,7 @@
 package Account
 
+import "sync"
+
 type Company struct {
 	Id     int    `xml:"Id"`
 	T_mid  int    `xml:"T_mid"`  //  上一级 ID
@@ -7,23 +9,23 @@ type Company struct {
 	T_uids string `xml:"T_uids"` // 绑定用户 Uid|  如:U1|U2|
 }
 
-var CompanyMap map[int]Company // 泛型
+var CompanyMap *sync.Map // 泛型
 
 func init() {
-	CompanyMap = make(map[int]Company)
+	CompanyMap = new(sync.Map)
 }
 
 func Read_Company_All_Map(A []Company) {
 	for _, v := range A {
-		CompanyMap[v.Id] = v
+		CompanyMap.Store(v.Id, v)
 	}
 }
 
 func Read_Company_T_name_Get(id int) string {
 	// 有先加入 给全部人发消息
-	v, ok := CompanyMap[id] /*如果确定是真实的,则存在,否则不存在 */
+	v, ok := CompanyMap.Load(id) /*如果确定是真实的,则存在,否则不存在 */
 	if ok {
-		return v.T_name
+		return v.(Company).T_name
 	} else {
 		return ""
 	}