expr.go 589 B

123456789101112131415161718192021222324252627282930313233
  1. package main
  2. import (
  3. "fmt"
  4. "go/ast"
  5. )
  6. func parseTypeExpr(loc string, s ast.Expr, ln bool) {
  7. switch s := s.(type) {
  8. case *ast.ArrayType:
  9. if s.Len == nil {
  10. fmt.Print("slice of ")
  11. } else {
  12. fmt.Print("array of ")
  13. }
  14. parseTypeExpr(loc, s.Elt, false)
  15. case *ast.ChanType:
  16. fmt.Print("chan of ")
  17. parseTypeExpr(loc, s.Value, false)
  18. case *ast.Ident:
  19. fmt.Print(s)
  20. case *ast.MapType:
  21. fmt.Print("map of ")
  22. parseTypeExpr(loc, s.Value, false)
  23. fmt.Print(" by ")
  24. parseTypeExpr(loc, s.Key, false)
  25. default:
  26. fmt.Printf("type: %#v\n", s)
  27. }
  28. if ln {
  29. fmt.Println()
  30. }
  31. }