面试题答案
一键面试在Go语言中,要初始化一个能以字符串类型的键来对应任意类型的值且并发安全的Map,可以使用sync.Map
。以下是示例代码:
package main
import (
"fmt"
"sync"
)
func main() {
var cache sync.Map
// 存储数据
cache.Store("key1", "value1")
cache.Store("key2", 123)
// 获取数据
value, ok := cache.Load("key1")
if ok {
fmt.Println("Value for key1:", value)
}
}
原因:Go语言原生的map
本身不是并发安全的,在多个goroutine同时读写map
时会导致数据竞争,出现未定义行为。而sync.Map
是Go标准库提供的一个线程安全的键值对集合,它通过内部的读写分离、分段锁等机制,允许在多个goroutine中安全地读写数据,避免数据竞争问题,适用于缓存系统这种可能会有高并发读写的场景。