golang项目中对以前方法新增参数

问题:对于golang项目中,随着项目的迭代,对于某个方法,如果原有的参数不够用,需要添加新的参数,又不想修改所有调用的地方

。如何做才能更好的扩展?

这里提供一种方法:

注:如果能不新增参数最好不要新增

1、原有方法,例如:

func Mytest(arg1 string, arg2 int64){
	fmt.Println(arg1, arg2)
}

2、添加参数 args ...interface{} , 注:添加使用三个点的参数,以前的方法是不需要修改的,不会报错,相当于三个点参数args默认值是interface{}的切片。

func Mytest(arg1 string, arg2 int64, args ...interface{}){
	fmt.Println(arg1, arg2, args)
}

3、到此其实已经实现了新增参数,但是不好用而已,随着项目迭代args会变得无法区分。我们希望有个key能做区分,所以定义个 ExtArgF 方法,如:

type ExtArgF func() (k string, v []interface{})

func Mytest(arg1 string, arg2 int64, args ...ExtArgF){
	fmt.Println(arg1, arg2)
	for _, arg := range args{
		if k, v := arg(); k == "test1"{
			fmt.Println(1, int64(v[0].(int)) + 1, v[1]) 
		}else if k == "test2" {
			fmt.Println(2, v[0], v[1]) 
		}
	}
}

4、这样以后迭代就可以添加若干个参数了,使用示例:

var extArg1 ExtArgF = func()(k string, v []interface{}){
		return "test1", append(v, 1, 2)
	}
	var extArg2 ExtArgF = func()(k string, v []interface{}){
		return "test2", append(v, "ss", "2")
	}
	Mytest("1", 1, extArg1, extArg2)

5、还是那句话,如果有不新增参数的方法最好不新增

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章