如何将映射结构声明为全局变量?

How can I declare a struct of maps as a global variable?

为了声明全局映射,我可以在创建时直接初始化它:

package main

var a = map[string]string{}

func main() {
    a["hello"] = "world"
}

如何初始化地图的全局结构?类似的做法是不正确的:

var db struct {
    Users   map[string]User{}
    Entries map[string]Entry{}
}

我也试过

var usersMap = map[string]User{}
var entriesMap = map[string]Entry{}

var db struct {
    Users   usersMap 
    Entries entriesMap 
}

usersMapentriesMap 不是类型。

我可以从 main() 中初始化 db,前提是它仍然是全局的。

结构字段声明需要类型,而不是值。复合文字表达式 map[string]User{}map[string]Entry{} 是值,而不是类型。

通过将字段类型声明与字段值初始化分开来修复:

var db = struct {
    Users   map[string]User
    Entries map[string]Entry
}{
    Users:   map[string]User{},
    Entries: map[string]Entry{},
}