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

我有两个 golang 函数,做完全相同的事情,一个将输入切片,另一个将地图作为输入。我想将其合并为一个函数,以避免重复。


func DoSomething([]data) {

//do something.

}


func DoSomething(map[string]data) {

    //do something.

}

组合函数可能如下所示:


    func DoSomethingNew (param type) {

       //param could be map or slice

    }

我想知道是否可以将不同类型传递给 golang 中的相同函数以及如何传递。我用谷歌搜索但找不到任何相关内容。


翻过高山走不出你
浏览 211回答 2
2回答

慕标5832272

您可以使用接口 Go Playgroundfunc 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()}您实际检查类型并根据类型执行某些操作的位置。

神不在的星期二

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

相关分类

Go