2014-09-20 83 views
1

當我定義功能如何根據參數類型獲取返回值?

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

我必須設置參數和返回值類型。如何根據參數類型返回值,例如

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

我可以這樣做嗎?

回答

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) 
0

圍棋還沒有像C#或Java泛型的價值。 它有一個空的interface(接口{})

下面是代碼,我認爲回答你的問題,如果我理解正確的話:

包主要

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; 
} 
相關問題