go
复制代码
package main
import (
"sync"
)
// SafeMap 并发安全的map结构
type SafeMap struct {
mu sync.RWMutex
data map[string]interface{}
}
// NewSafeMap 创建新的SafeMap实例
func NewSafeMap() *SafeMap {
return &SafeMap{
data: make(map[string]interface{}),
}
}
// Set 设置键值对
func (m *SafeMap) Set(key string, value interface{}) {
m.mu.Lock()
defer m.mu.Unlock()
m.data[key] = value
}
// Get 获取键值
func (m *SafeMap) Get(key string) (interface{}, bool) {
m.mu.RLock()
defer m.mu.RUnlock()
val, ok := m.data[key]
return val, ok
}
// Delete 删除键
func (m *SafeMap) Delete(key string) {
m.mu.Lock()
defer m.mu.Unlock()
delete(m.data, key)
}
// Len 获取map长度
func (m *SafeMap) Len() int {
m.mu.RLock()
defer m.mu.RUnlock()
return len(m.data)
}
// Keys 获取所有键
func (m *SafeMap) Keys() []string {
m.mu.RLock()
defer m.mu.RUnlock()
keys := make([]string, 0, len(m.data))
for k := range m.data {
keys = append(keys, k)
}
return keys
}
func main() {
// 使用示例
safeMap := NewSafeMap()
safeMap.Set("name", "Jason")
safeMap.Set("age", 18)
}