参考答案
结论:Go原生数据类型大多非线程安全,仅channel及借助同步原语包装的类型并发安全。核心要点:1) channel本身线程安全,收发操作原子且同步;2) sync.Mutex等同步类型用于保护资源;3) atomic包对基础类型原子操作安全;4) 内置map、slice、struct等并发读写需外部锁,否则map会panic;5) string只读可安全并发读但不可变。原理:channel运行时加锁保证同步;map无锁设计假设无并发写;atomic使用CPU锁指令。示例:多goroutine写map需sync.RWMutex。