如何在没有代码重复的情况下初始化映射?

问题描述 投票:-1回答:2

我有一个名为game的结构类型,如下所示:

type game struct {
    commands map[string]*command
    // ...
}

并且我想在init函数中的这种类型的结构中初始化映射。我是这样的

func (game *game) init() {
    game.commands = make(map[string]*command)
    // ...
}

我认为,有一些代码重复。如果我只能声明一次(map[string]*command)类型,那就太好了。有没有办法做到这一点?我尝试使用反射,但是它似乎不起作用,因为make内建函数接受类型而不是值。

go types code-duplication
2个回答
1
投票

如果担心重复两次map[string]*command是重复的,则可以从中定义一个新类型。

type commandsMap map[string]*command

type game struct {
    commands commandsMap 
    // ...
}

func (game *game) init() {
    game.commands = make(commandsMap)
    // ...
}

1
投票

这里没有代码重复。代码重复是指代码中有多个执行相同操作的点。话虽如此,您可以将代码保持原样,也可以使用构造函数,这样做的好处是可以限制在您键入的位置进行此初始化,并且这也是一种更简洁的方法。

type game struct {
   commands map[string]*command
}

func game() *game {
   return &game{commands: make(map[string]*command)}
}

这样,当您需要game对象时,就可以这样做

gameObject := game()

然后像往常一样使用map方法(或者您也可以为此使用实用程序方法)

© www.soinside.com 2019 - 2024. All rights reserved.