我一直在为golang缺少可选参数而苦苦挣扎,所以我一直在使用最接近的解决方法:可变参数。尽管我让它工作了,但尝试通过引用将多个变量类型传递给同一个可变参数是很麻烦的:
// back-end
func UpdateRef(variadic ...*interface{}) {
for _, v := range variadic {
if v.(type) == string {
*v = "New ref val"
}
}
}
// front-end
func Interface(x interface{}) interface{} { return &x }
func main() {
ref := Interface("Hey") // starts as "Hey"
i := Interface(500)
UpdateRef(&ref, &i) // ends at "New ref val"
}
如果我用这个替换前端:
// front-end
func main() {
ref := "Hey" // starts as "Hey"
UpdateRef(ref, 500) // ends at "New ref val"
}
...那么我如何更改后端以使所需的前端代码工作?后端可以根据需要尽可能冗长,只要所需的前端按原样运行即可。这可能吗?如果没有,是否有一个优雅的解决方案需要对所需的前端进行最少的更改?
拉莫斯之舞
30秒到达战场
相关分类