如何将一个包含映射的结构声明为全局变量?

huangapple go评论116阅读模式
英文:

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

问题

为了声明一个全局的映射(map),我可以在创建时直接初始化它:

  1. package main
  2. var a = map[string]string{}
  3. func main() {
  4. a["hello"] = "world"
  5. }

如何初始化一个全局的映射结构体(struct of maps)呢?类似的方法是错误的:

  1. var db struct {
  2. Users map[string]User{}
  3. Entries map[string]Entry{}
  4. }

我也尝试了以下方式:

  1. var usersMap = map[string]User{}
  2. var entriesMap = map[string]Entry{}
  3. var db struct {
  4. Users usersMap
  5. Entries entriesMap
  6. }

但是usersMapentriesMap不是类型。

如果db仍然是全局的,我可以在main()函数内部初始化它。

英文:

In order to declare a global map, I can directly initialize it at creation time:

  1. package main
  2. var a = map[string]string{}
  3. func main() {
  4. a["hello"] = "world"
  5. }

How can I initialize a global struct of maps? A similar approach is incorrect:

  1. var db struct {
  2. Users map[string]User{}
  3. Entries map[string]Entry{}
  4. }

I also tried something like

  1. var usersMap = map[string]User{}
  2. var entriesMap = map[string]Entry{}
  3. var db struct {
  4. Users usersMap
  5. Entries entriesMap
  6. }

but usersMap and entriesMap are not types.

I would be fine to initialize db from within main(), provided that it is still global.

答案1

得分: 3

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

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

  1. var db = struct {
  2. Users map[string]User
  3. Entries map[string]Entry
  4. }{
  5. Users: map[string]User{},
  6. Entries: map[string]Entry{},
  7. }
英文:

A struct field declaration expects a type, not a value. The composite literal expressions map[string]User{} and map[string]Entry{} are values, not types.

Fix by separating the field type declarations from the field value initializations:

  1. var db = struct {
  2. Users map[string]User
  3. Entries map[string]Entry
  4. }{
  5. Users: map[string]User{},
  6. Entries: map[string]Entry{},
  7. }

huangapple
  • 本文由 发表于 2022年3月18日 03:35:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/71518103.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定