我有两个golang函数,做同样的事情,一个接受输入切片,另一个接受一个map作为输入。我想将它组合成一个函数,以避免重复。
func DoSomething([]data) {
//do something.
}
func DoSomething(map[string]data) {
//do something.
}
组合功能可能如下所示:
func DoSomethingNew (param type) {
//param could be map or slice
}
我想知道是否可以在golang中将不同类型传递给同一个函数以及如何。我用谷歌搜索,但找不到任何相关的东西。
答案 0 :(得分:7)
您可以使用接口 Go Playground
func F(data interface{}) {
switch data.(type){
case []int:
fmt.Println("Slice")
fmt.Println(data)
case map[string]int:
fmt.Println("Map")
fmt.Println(data)
}
fmt.Println()
}
您实际检查类型并根据类型执行某些操作。
答案 1 :(得分:3)
有几种方法可以做到这一点,但简单的方法就是让DoSomethingNew
接受interface{}
类型。在方法内部,您将进行类型切换,或者在这种情况下只有两个选项,可能只有一个类型断言,然后是另一个,如果两个选项都失败则返回错误。另一个选择是将两个作为参数并检查函数内部的nil
,使用类似的if,else-if,else模式来处理错误,如果输入既不是您要查找的类型。为了使您的代码更安全,您可以转移到比所有类型实现的空接口更严格的接口。您还可以使用类型本身作为接收类型来进行某些方法链接甚至实现该方法。这是一个展示一些想法的例子; https://play.golang.org/p/_v2AyFjGzv