当我定义功能
时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
}
我可以这样做吗?
答案 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)
如果我理解正确的话,以下是我认为可以回答您问题的代码:
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;
}