我有两个 golang 函数,做完全相同的事情,一个将输入切片,另一个将地图作为输入。我想将其合并为一个函数,以避免重复。func DoSomething([]data) {//do something.}func DoSomething(map[string]data) { //do something.}组合函数可能如下所示: func DoSomethingNew (param type) { //param could be map or slice }我想知道是否可以将不同类型传递给 golang 中的相同函数以及如何传递。我用谷歌搜索但找不到任何相关内容。
2 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
您可以使用接口 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()
}
您实际检查类型并根据类型执行某些操作的位置。
神不在的星期二
TA贡献1963条经验 获得超6个赞
有几种方法可以做到这一点,但最简单的方法是让它DoSomethingNew
接受interface{}
类型。在方法内部,您将进行类型切换,或者在这种情况下只有两个选项,可能只有一个类型断言,然后是另一个,如果两者都失败则返回错误。另一种选择是将两者都作为参数并nil
使用类似的 if、else-if、else 模式检查函数内部,以在输入不是您要查找的任何类型时处理错误。为了使您的代码更安全,您可以使用比所有类型都实现的空接口更严格的接口。您还可以执行一些方法链接,甚至使用类型本身作为接收类型来实现该方法。这是一个示例,展示了一些想法;https://play.golang.org/p/_v2AyFjGzv
- 2 回答
- 0 关注
- 210 浏览
添加回答
举报
0/150
提交
取消