出于测试原因,我有兴趣在 Go 中重新分配工厂函数,以降低在想要模拟其中一种类型时在给定包中使用工厂函数的风险。
我见过人们将工厂函数作为参数传递给包含函数,并创建一个将工厂作为数据成员保存的结构。是否可以保留顶级函数变量并以某种方式用给定文件中的另一个实现覆盖一个实现?我已经尝试过以下方法:
type AirportFactory func (string, int, int) Airport
var makeAirport AirportFactory = func(n string, x int, y int) Airport {
return airport{name: n, pos: Position{X: x, Y: y}}
}
makeAirport = func(n string, x int, y int) Airport {
return airport{name:"default", pos:Position{X:0, Y:0}}
}
但是当我构建代码时,6g 在最后一个作业的结束行上给出了以下错误:
函数体外部的非声明语句
这使得函数类型的 var
看起来像是 const,至少在顶层是这样。有什么办法可以解决这个问题吗?
最佳答案
它们不是恒定的。您只是不能分配给函数外部已声明的变量。像这样的东西会起作用:
func changeAirport() {
makeAirport = func(n string, x int, y int) Airport {
return airport{name:"default", pos:Position{X:0, Y:0}}
}
}
就 go 而言,函数外部的变量赋值不会以任何特定顺序发生。因此,您只能执行一次。
关于go - 可重新配置的函数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11076656/