Я учусь идти Ланг и я наткнулся ниже кодинициализации переменной и область действия в Golang
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
}
У меня 2 сомнения:
почему это необходимо инициализировать
kvstore
переменную один раз в глобальном масштабе и затем один раз вinit_db
функция?Когда кто-то звонит
put/get
функция из другого модуля, как поддерживается состояние kvstore? (В «C», мы, как правило, явно передать структуру данных в функции, но в этом случае поставить или получить непосредственно работает на глобальной переменной kvstore)
Вы можете повторно инициализировать с помощью 'init_db()' – e0k
Невозможно вызвать get/put из других модулей, потому что эти символы не экспортируются. Первая буква должна быть в верхнем регистре для экспортируемого символа/идентификатора. Kvstore определяется как глобальная переменная, но поскольку первая буква не является прописной, она не видна напрямую и недоступна из внешних модулей. Это похоже на статическую переменную в C. – chmike