Golang 一些小例——反射

前端之家收集整理的这篇文章主要介绍了Golang 一些小例——反射前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. )
  7.  
  8. type A struct {
  9. B
  10. Name string
  11. Age int
  12. UseTool bool
  13. }
  14.  
  15. type B struct {
  16. C
  17. Name1 string
  18. Age1 int
  19. UseTool1 bool
  20. }
  21.  
  22. type C struct {
  23. Name2 string
  24. Age2 int
  25. UseTool2 bool
  26. }
  27.  
  28. func main() {
  29.  
  30. m := B{C{"aa",12,true},"aa",true}
  31. u := A{m,true}
  32.  
  33. getInfo(u)
  34. getStructInfo(u)
  35. }
  1. func getInfo(obj interface{}) {
  2. objCheck := reflect.ValueOf(obj)
  3. switch objCheck.Kind() {
  4. case reflect.Ptr:
  5. fmt.Print("Ptr")
  6. //objCheck.Elem()
  7. case reflect.Struct:
  8. fmt.Print("Struct")
  9. case reflect.String:
  10. fmt.Print("String")
  11. case reflect.Int:
  12. fmt.Print("Int")
  13. }
  14. }
  15. func getStructInfo(obj interface{}) {
  16. objType := reflect.TypeOf(obj)
  17. objValue := reflect.ValueOf(obj)
  18. dealAnonymous(objType,objValue)
  19. return
  20. }
  1. func dealAnonymous(objType reflect.Type,objValue reflect.Value) {
  2. for i := 0; i < objType.NumField(); i++ {
  3. objRef := objType.Field(i)
  4. if objRef.Anonymous {
  5. dealAnonymous(objRef.Type,objValue.Field(i))
  6. continue
  7. }
  8. objVal := objValue.Field(i).Interface()
  9. fmt.Printf("\n%-12s: %-6v = %v",objRef.Name,objRef.Type,objVal)
  10. }
  11. return
  12. }

以前学golang的时候写的小例子,具体函数不懂请查阅标准库

感觉python能做的工作, Golang都可以代替。

性能感觉不错。

猜你在找的Go相关文章