为了账号安全,请及时绑定邮箱和手机立即绑定

如何将不同类型传递给函数

如何将不同类型传递给函数

Go
翻过高山走不出你 2021-11-22 19:29:23
我有两个 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()

}

您实际检查类型并根据类型执行某些操作的位置。


查看完整回答
反对 回复 2021-11-22
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

有几种方法可以做到这一点,但最简单的方法是让它DoSomethingNew接受interface{}类型。在方法内部,您将进行类型切换,或者在这种情况下只有两个选项,可能只有一个类型断言,然后是另一个,如果两者都失败则返回错误。另一种选择是将两者都作为参数并nil使用类似的 if、else-if、else 模式检查函数内部,以在输入不是您要查找的任何类型时处理错误。为了使您的代码更安全,您可以使用比所有类型都实现的空接口更严格的接口。您还可以执行一些方法链接,甚至使用类型本身作为接收类型来实现该方法。这是一个示例,展示了一些想法;https://play.golang.org/p/_v2AyFjGzv


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信