map.go 950 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package jconcurrency
  2. import (
  3. "sync"
  4. )
  5. //HashMap对象,安全操作
  6. type JyMap struct {
  7. Lock sync.RWMutex
  8. Data map[any]any
  9. }
  10. func NewJM() *JyMap {
  11. return &JyMap{Data: map[any]any{}}
  12. }
  13. //设置
  14. func (jm *JyMap) Set(k, v any) {
  15. jm.Lock.Lock()
  16. jm.Data[k] = v
  17. jm.Lock.Unlock()
  18. }
  19. //获取
  20. func (jm *JyMap) Get(k any) (v any) {
  21. jm.Lock.RLock()
  22. defer jm.Lock.RUnlock()
  23. return jm.Data[k]
  24. }
  25. //获取并删除
  26. func (jm *JyMap) GetAndDel(k any) (v any) {
  27. jm.Lock.Lock()
  28. defer jm.Lock.Unlock()
  29. v = jm.Data[k]
  30. delete(jm.Data, k)
  31. return
  32. }
  33. //仅删除
  34. func (jm *JyMap) Del(k any) {
  35. jm.Lock.Lock()
  36. defer jm.Lock.Unlock()
  37. delete(jm.Data, k)
  38. return
  39. }
  40. //如果不存在则设置
  41. func (jm *JyMap) SetIfNoExists(k, v any) {
  42. jm.Lock.Lock()
  43. defer jm.Lock.Unlock()
  44. if jm.Data[k] == nil {
  45. jm.Data[k] = v
  46. }
  47. }
  48. //map中是否存在
  49. func (jm *JyMap) IsExists(k any) bool {
  50. jm.Lock.RLock()
  51. defer jm.Lock.RUnlock()
  52. return jm.Data[k] != nil
  53. }