我想从类型名称中获取(反射)类型 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函数。
答案 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()
函数时你得到了什么类型,所以你知道它的名字,为什么不只是使用它?