我如何根据参数类型获得返回值?

时间:2014-09-20 04:16:14

标签: go

当我定义功能

func test(a int, b int) int {
    //bla
}

我必须设置参数并返回值类型。我如何根据参数类型返回值,ex

func test(argument type) type {
    //if argument type == string, must return string
    //or else if argument int, must return integer
}

我可以这样做吗?

2 个答案:

答案 0 :(得分:2)

Go缺乏泛型,(不会以某种方式论证这一点),你可以通过将interface{}传递给函数然后在另一端做一个类型断言来实现这一点。

package main

import "fmt"

func test(t interface{}) interface{} {
    switch t.(type) {
    case string:
        return "test"
    case int:
        return 54
    }
    return ""
}

func main() {
    fmt.Printf("%#v\n", test(55))
    fmt.Printf("%#v", test("test"))
}

你必须输入断言你得到的值

v := test(55).(int)

答案 1 :(得分:0)

Go还没有像C#或Java这样的泛型。 它有一个空接口(interface {})

如果我理解正确的话,以下是我认为可以回答您问题的代码:

package main

import (
  "fmt"
  "reflect"
)


type generic interface{} // you don't have to call the type generic, you can call it X

func main() {
    n := test(10) // I happen to pass an int
    fmt.Println(n)
}


func test(arg generic) generic {
   // do something with arg
   result := arg.(int) * 2
   // check that the result is the same data type as arg
   if reflect.TypeOf(arg) != reflect.TypeOf(result) {
     panic("type mismatch")
   }
   return result;
}