变量初始化& Golang的范围

时间:2016-12-24 02:11:21

标签: go

我正在学习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
}

我有两个疑问:

  1. 为什么需要在全局范围内初始化kvstore变量,然后在init_db函数中初始化一次?

  2. 当有人从其他模块调用put/get函数时,kvstore的状态是如何保持的? (在' C'我们通常必须明确地将数据结构传递给函数,但在这种情况下put或get直接用于全局kvstore变量)

1 个答案:

答案 0 :(得分:0)

无需初始化kvstore两次。

您可以将全局kvstore变量视为与C中具有静态持续时间的变量类似的东西。并且与写入同时访问映射是不安全的。您可能需要进行同步,就像访问C中的静态全局变量一样。