如何在Golang中find一个对象的types?

如何在Golang中find对象的types? 在Python中,我只是使用typeof来获取对象的types。 同样在Go中,有没有一种方法来实现?

这是我从中迭代的容器

for e := dlist.Front(); e != nil; e = e.Next() { lines := e.Value fmt.Printf(reflect.TypeOf(lines)) } 

在这种情况下,我无法获取对象行的types,这是一个string数组。

Goreflection包有检查variablestypes的方法。

以下片段将打印出string的reflectiontypes,整数和浮点数。

 package main import ( "fmt" "reflect" ) func main() { tst := "string" tst2 := 10 tst3 := 1.2 fmt.Println(reflect.TypeOf(tst)) fmt.Println(reflect.TypeOf(tst2)) fmt.Println(reflect.TypeOf(tst3)) } 

请参阅: http : //play.golang.org/p/XQMcUVsOja查看它的行动。

更多文档在这里: http : //golang.org/pkg/reflect/#Type

我发现有3种方法可以在运行时识别types:

使用string格式

 func typeof(v interface{}) string { return fmt.Sprintf("%T", v) } 

使用reflection包

 func typeof(v interface{}) string { return reflect.TypeOf(v).String() } 

使用types断言

 func typeof(v interface{}) string { switch t := v.(type) { case int: return "int" case float64: return "float64" //... etc default: _ = t return "unknown" } } 

每种方法都有不同的最佳用例:

  • string格式化 – 占用空间小(不需要导入reflection包)

  • 反映包 – 当需要更多关于types的细节时,我们可以使用全面的reflectionfunction

  • types断言 – 允许分组types,例如,将所有int32,int64,uint32,uint64types识别为“int”

使用reflection包:

包反映了实现运行时reflection,允许程序操纵任意types的对象。 典型的用法是用静态types接口{}取值并通过调用TypeOf来提取它的dynamictypes信息,TypeOf返回一个Type。

 package main import ( "fmt" "reflect" ) func main() { b := true s := "" n := 1 f := 1.0 a := []string{"foo", "bar", "baz"} fmt.Println(reflect.TypeOf(b)) fmt.Println(reflect.TypeOf(s)) fmt.Println(reflect.TypeOf(n)) fmt.Println(reflect.TypeOf(f)) fmt.Println(reflect.TypeOf(a)) } 

生产:

布尔

INT
float64
[]串

操场

使用ValueOf(i interface{}).Kind()示例ValueOf(i interface{}).Kind()

 package main import ( "fmt" "reflect" ) func main() { b := true s := "" n := 1 f := 1.0 a := []string{"foo", "bar", "baz"} fmt.Println(reflect.ValueOf(b).Kind()) fmt.Println(reflect.ValueOf(s).Kind()) fmt.Println(reflect.ValueOf(n).Kind()) fmt.Println(reflect.ValueOf(f).Kind()) fmt.Println(reflect.ValueOf(a).Index(0).Kind()) // For slices and strings } 

生产:

布尔

INT
float64

操场

获取string表示forms:

http://golang.org/pkg/fmt/

%T值的types的Go语法表示

 package main import "fmt" func main(){ types := []interface{} {"a",6,6.0,true} for _,v := range types{ fmt.Printf("%T\n",v) } } 

输出:

 string int float64 bool 

我会远离反思。 包。 而是使用%T

 package main import ( "fmt" ) func main() { b := true s := "" n := 1 f := 1.0 a := []string{"foo", "bar", "baz"} fmt.Printf("%T\n", b) fmt.Printf("%T\n", s) fmt.Printf("%T\n", n) fmt.Printf("%T\n", f) fmt.Printf("%T\n", a) } 

最好的方法是在Google中使用reflection概念。
reflect.TypeOf与包名称一起给出types
reflect.TypeOf().Kind()给出了下划线的types

你可以使用reflect.TypeOf

  • 基本types(例如: intstring ):它将返回它的名字(例如: intstring
  • struct:它会以<package name>.<struct name>格式返回(例如: main.test