2014-02-06 49 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