在Go中,可以使用通道(channel)来实现并发访问安全的数据结构。通过在数据结构上使用互斥锁(mutex)或读写锁(RWMutex),可以确保在并发访问时数据结构的一致性。以下是一个使用互斥锁来实现安全并发访问的示例:
package main import ( "sync" ) type SafeMap struct { mu sync.Mutex items map[string]string } func NewSafeMap() *SafeMap { return &SafeMap{ items: make(map[string]string), } } func (sm *SafeMap) Set(key, value string) { sm.mu.Lock() defer sm.mu.Unlock() sm.items[key] = value } func (sm *SafeMap) Get(key string) (string, bool) { sm.mu.Lock() defer sm.mu.Unlock() value, ok := sm.items[key] return value, ok } func main() { sm := NewSafeMap() go func() { sm.Set("key1", "value1") }() go func() { value, ok := sm.Get("key1") if ok { println(value) } }() // Wait for goroutines to finish select {} }
在这个示例中,我们定义了一个SafeMap类型,该类型包含一个互斥锁和一个字符串键值对的map。通过在Set和Get方法中使用互斥锁,我们确保在并发访问时数据结构的一致性。在main函数中,我们启动两个goroutine来并发地设置和获取数据,并通过互斥锁保证安全性。