package pay import ( "common/connection" "goutil/logUtilPlus" "sync" ) var ( // 用户缓存对象 orderMap = make(map[int64]*Order) rwmu sync.RWMutex ) // GetUserByID 根据用户id获取用户信息 func GetUserByID(orderID int64) (*Order, error) { //判断缓存是否存在 var order *Order func() *Order { rwmu.RLock() defer rwmu.RUnlock() ok := true if order, ok = orderMap[orderID]; ok { return order } return nil }() if order != nil { return order, nil } result := connection.GetPayDB().First(&order, orderID) if result.Error != nil { return nil, result.Error } //添加缓存 func() { rwmu.Lock() defer rwmu.Unlock() orderMap[order.OrderID] = order }() return order, nil } // AddOrderCache 添加用户缓存 func AddOrderCache(order *Order) { rwmu.Lock() defer rwmu.Unlock() orderMap[order.OrderID] = order } // AddOrder 添加订单 func AddOrder(order *Order) (int64, error) { //处理一些验证 // 写入到数据库 result := connection.GetPayDB().Create(&order) // 通过数据的指针来创建 if result.Error != nil { logUtilPlus.ErrorLog("添加支付订单失败 错误信息:", result.Error.Error()) } //添加缓存 AddOrderCache(order) return order.OrderID, nil }