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

lobo · · 753 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

问题:对于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"{
			v1 := v.([]int64)
			fmt.Println(1, v1[0]) 
		}else if k == "test2" {
			v1 := v.([]string)
			fmt.Println(2, v1[0])
		}
	}
}

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

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

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

 


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

753 次点击  
加入收藏 微博
1 回复  |  直到 2019-11-13 17:36:21
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传