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