我如何获得Type

时间:2014-02-06 01:14:31

标签: types go

我想从类型名称中获取(反射)类型 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 个答案:

答案 0 :(得分:2)

没有办法将类型作为参数传递给Go中的函数,所以你问的是不可能的。如果要使用reflect模块来处理类型,则需要将值作为起点。

答案 1 :(得分:0)

正如@James Henstridge所说,你不能将一个类型传递给go中的函数。但是,如果您有复合类型,那么您可以非常轻松地创建它的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()函数时你得到了什么类型,所以你知道它的名字,为什么不只是使用它?