【问题标题】:Golang generic param [duplicate]Golang 通用参数
【发布时间】:2016-08-28 05:45:58
【问题描述】:

有没有一种方法可以使用一个使用泛型参数的函数,而不是如下所示的两个函数?我有 Java 背景,正在寻找一种方法来拥有这样的东西

//Java
public Something doSomething(T val)

//Go
func (l *myclass) DoSomethingString(value string) error {
    test := []byte[value]
    // do something with test
    return err
}
func (l *myclass) DoSomethingInt(value int64) error {
    test := []byte[value]
    // do something with test
    return err
}

【问题讨论】:

  • 这似乎是一个接口的用例。什么是“东西”?
  • 我将其转换为字节并做一些工作..

标签: generics go


【解决方案1】:

不幸的是,Go 没有泛型,也没有重载。您可以使用interface{} 类型的参数并切换它的真实类型:

func (*Test) DoSomething(p interface{}) {
    switch v := p.(type) {
        case int64:
            fmt.Println("Got an int:", v)
        case string:
            fmt.Println("Got a string", v)
        default:
            fmt.Println("Got something unexpected")
    }
}

Link on Playground

【讨论】:

  • 我在很多项目中都遇到过这个问题。 return interface{} 是这样做的方法(如果您想返回具有相同功能的不同类型的操作系统,则某些 switch case 或其他)。因此,@tkausl 已被检查并正常工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 2016-12-20
  • 2016-08-22
  • 1970-01-01
相关资源
最近更新 更多