我正在学习go lang,我遇到了代码
var kvstore = make(map[string][]byte)
// this function instantiates the database
func init_db() {
kvstore = make(map[string][]byte)
}
// put inserts a new key value pair or updates the value for a
// given key in the store
func put(key string, value []byte) {
kvstore[key] = value
}
// get fetches the value associated with the key
func get(key string) []byte {
v, _ := kvstore[key]
return v
}
我有两个疑问:
为什么需要在全局范围内初始化kvstore
变量,然后在init_db
函数中初始化一次?
当有人从其他模块调用put/get
函数时,kvstore的状态是如何保持的? (在' C'我们通常必须明确地将数据结构传递给函数,但在这种情况下put或get直接用于全局kvstore变量)
答案 0 :(得分:0)
无需初始化kvstore两次。
您可以将全局kvstore变量视为与C中具有静态持续时间的变量类似的东西。并且与写入同时访问映射是不安全的。您可能需要进行同步,就像访问C中的静态全局变量一样。