2014-02-06 88 views
0

我想從類型名稱中獲得(反映)類型。
http://play.golang.org/p/c-9IpSafx0如何獲得類型

package main 

import (
    "fmt" 
    "reflect" 
) 

type Name string 

func main() { 
    fmt.Println("Hello, playground") 

    var name Name = "Taro" 
    fmt.Println(name) 

    fmt.Println(getType(name)) 
    // fmt.Println(getType(Name)) // want to same as getType(name) 
} 

func getType(v interface{}) reflect.Type { 
    return reflect.TypeOf(v) 
} 

如何重寫的getType功能。

回答

2

在Go中沒有辦法將類型作爲參數傳遞給函數,所以你所要求的是不可能的。如果您想使用reflect模塊來處理類型,則需要有一個值作爲起點。

+0

您可以按名稱獲取方法。我想知道是否有理由不允許按名稱查找類型或者是否是疏忽。 –

0

正如@詹姆斯亨斯特里奇所說的,你不能將類型傳遞給函數。但是,如果你有一個複合類型,那麼你可以很容易地創建一個nil版本,並通過它。 (play

type Name struct{ name string } 

func main() { 
    var name = Name{"Taro"} 
    fmt.Println(name) 

    fmt.Println(getType(name)) 
    fmt.Println(getType(Name{})) // want to same as getType(name) 
} 

func getType(v interface{}) reflect.Type { 
    return reflect.TypeOf(v) 
} 

這麼說,我不明白你爲什麼會想這樣做,因爲你知道什麼類型的,當你把它傳遞到getType()功能,你已經得到了,所以你知道它的名字,那麼爲什麼不使用它呢?

+0

這個樣本很明顯。但是,真實並不清楚。例如,一個函數有一些參數不清楚。 – Ken