我有一个名为game的结构类型,如下所示:
type game struct {
commands map[string]*command
// ...
}
并且我想在init函数中的这种类型的结构中初始化映射。我是这样的
func (game *game) init() {
game.commands = make(map[string]*command)
// ...
}
我认为,有一些代码重复。如果我只能声明一次(map[string]*command)
类型,那就太好了。有没有办法做到这一点?我尝试使用反射,但是它似乎不起作用,因为make内建函数接受类型而不是值。
如果担心重复两次map[string]*command
是重复的,则可以从中定义一个新类型。
type commandsMap map[string]*command
type game struct {
commands commandsMap
// ...
}
func (game *game) init() {
game.commands = make(commandsMap)
// ...
}
这里没有代码重复。代码重复是指代码中有多个执行相同操作的点。话虽如此,您可以将代码保持原样,也可以使用构造函数,这样做的好处是可以限制在您键入的位置进行此初始化,并且这也是一种更简洁的方法。
type game struct {
commands map[string]*command
}
func game() *game {
return &game{commands: make(map[string]*command)}
}
这样,当您需要game
对象时,就可以这样做
gameObject := game()
然后像往常一样使用map方法(或者您也可以为此使用实用程序方法)