我有一个函数可以解决 Go 不允许在方法声明中设置默认值的问题。我想通过允许可变数量的返回变量让它变得更好一点。我知道我可以允许一个接口数组作为返回类型,然后创建一个包含所有要返回的变量的接口数组,如下所示:
func SetParams(params []interface{}, args ...interface{}) (...[]interface{}) {
var values []interface{}
for i := range params {
var value interface{}
paramType := reflect.TypeOf(params[i])
if len(args) < (i + 1) {
value = params[i]
} else {
argType := reflect.TypeOf(args[i])
if paramType != argType {
value = params[i]
}
value = args[i]
}
values = append(values, value)
}
return values
}
这是您要为其定义默认值的方法的示例。您将其构建为可变参数函数(允许可变数量的参数),然后在函数内部而不是在声明行中定义您要查找的特定参数的默认值。
func DoSomething(args ...interface{}) {
//setup default values
str := "default string 1"
num := 1
str2 := "default string 2"
//this is fine
values := SetParams([]interface{str, num, str2}, args)
str = values[0].(string)
num = values[1].(int)
str = values[2].(string)
//I'd rather support this
str, num, str2 = SetParams(params, args)
}
我明白那个
[]接口{str,num,str2}
上例中的语法不正确。我这样做是为了简化我的帖子。但是,它代表了另一个构建接口数组的函数。
我想支持这一点:
str, num, str2 = SetParams(params, args)
而不必这样做:
values := SetParams([]interface{str, num, str2}, args)
str = values[0].(string)
num = values[1].(int)
str = values[2].(string)
有什么建议吗?帮助?
HUX布斯
哈士奇WWW
相关分类