我有兴趣在 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 在最后一个作业的最后一行给了我以下错误:
non-declaration statement outside function body
这使得函数类型的 s 看起来var
是 const 的,至少在顶层是这样。有没有办法解决这个问题?