mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-11-04 19:16:22 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package utils
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
 | 
						|
	cmap "github.com/orcaman/concurrent-map"
 | 
						|
)
 | 
						|
 | 
						|
type IMaps interface {
 | 
						|
	Set(key string, val interface{})
 | 
						|
	Get(key string) (interface{}, bool)
 | 
						|
	Del(key string)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 基础的Map结构
 | 
						|
 *
 | 
						|
 */
 | 
						|
type BaseMap struct {
 | 
						|
	m map[string]interface{}
 | 
						|
}
 | 
						|
 | 
						|
func (m *BaseMap) Set(key string, value interface{}) {
 | 
						|
	m.m[key] = value
 | 
						|
}
 | 
						|
func (m *BaseMap) Get(key string) (interface{}, bool) {
 | 
						|
	v, ok := m.m[key]
 | 
						|
	return v, ok
 | 
						|
}
 | 
						|
func (m *BaseMap) Del(key string) {
 | 
						|
	delete(m.m, key)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * CMap 并发结构
 | 
						|
 *
 | 
						|
 */
 | 
						|
type ConcurrentMap struct {
 | 
						|
	m cmap.ConcurrentMap
 | 
						|
}
 | 
						|
 | 
						|
func (m *ConcurrentMap) Set(key string, value interface{}) {
 | 
						|
	m.m.Set(key, value)
 | 
						|
}
 | 
						|
 | 
						|
func (m *ConcurrentMap) Get(key string) (interface{}, bool) {
 | 
						|
	return m.m.Get(key)
 | 
						|
}
 | 
						|
 | 
						|
func (m *ConcurrentMap) Del(key string) {
 | 
						|
	m.m.Remove(key)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Map 读写结构
 | 
						|
 *
 | 
						|
 */
 | 
						|
type RWLockMap struct {
 | 
						|
	m    map[string]interface{}
 | 
						|
	lock sync.RWMutex
 | 
						|
}
 | 
						|
 | 
						|
func (m *RWLockMap) Set(key string, value interface{}) {
 | 
						|
	m.lock.Lock()
 | 
						|
	defer m.lock.Unlock()
 | 
						|
	m.m[key] = value
 | 
						|
}
 | 
						|
 | 
						|
func (m *RWLockMap) Get(key string) (interface{}, bool) {
 | 
						|
	m.lock.RLock()
 | 
						|
	defer m.lock.RUnlock()
 | 
						|
	v, ok := m.m[key]
 | 
						|
	return v, ok
 | 
						|
}
 | 
						|
 | 
						|
func (m *RWLockMap) Del(key string) {
 | 
						|
	m.lock.Lock()
 | 
						|
	defer m.lock.Unlock()
 | 
						|
	delete(m.m, key)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * sync.Map 结构
 | 
						|
 *
 | 
						|
 */
 | 
						|
type SyncMap struct {
 | 
						|
	m sync.Map
 | 
						|
}
 | 
						|
 | 
						|
func (m *SyncMap) Set(key string, val interface{}) {
 | 
						|
	m.m.Store(key, val)
 | 
						|
}
 | 
						|
 | 
						|
func (m *SyncMap) Get(key string) (interface{}, bool) {
 | 
						|
	return m.m.Load(key)
 | 
						|
}
 | 
						|
 | 
						|
func (m *SyncMap) Del(key string) {
 | 
						|
	m.m.Delete(key)
 | 
						|
}
 | 
						|
 | 
						|
func NewMap(name string, len int) IMaps {
 | 
						|
	switch name {
 | 
						|
	case "cmap":
 | 
						|
		return &ConcurrentMap{m: cmap.New()}
 | 
						|
	case "rwmap":
 | 
						|
		m := make(map[string]interface{}, len)
 | 
						|
		return &RWLockMap{m: m}
 | 
						|
	case "syncmap":
 | 
						|
		return &SyncMap{}
 | 
						|
	default:
 | 
						|
		m := make(map[string]interface{}, len)
 | 
						|
		return &BaseMap{m: m}
 | 
						|
	}
 | 
						|
}
 |