123456789101112131415161718192021222324252627282930313233 |
- package main
- import (
- "fmt"
- "go/ast"
- )
- func parseTypeExpr(loc string, s ast.Expr, ln bool) {
- switch s := s.(type) {
- case *ast.ArrayType:
- if s.Len == nil {
- fmt.Print("slice of ")
- } else {
- fmt.Print("array of ")
- }
- parseTypeExpr(loc, s.Elt, false)
- case *ast.ChanType:
- fmt.Print("chan of ")
- parseTypeExpr(loc, s.Value, false)
- case *ast.Ident:
- fmt.Print(s)
- case *ast.MapType:
- fmt.Print("map of ")
- parseTypeExpr(loc, s.Value, false)
- fmt.Print(" by ")
- parseTypeExpr(loc, s.Key, false)
- default:
- fmt.Printf("type: %#v\n", s)
- }
- if ln {
- fmt.Println()
- }
- }
|