I solved it by experimenting.
*ast.Ident for the "string"
*ast.SelectExpr for the package type
Seems like there is no easier way.
On Tuesday, April 17, 2018 at 7:55:13 PM UTC+2, Darko Luketic wrote:
>
> Hi,
>
> I'm trying to parse a file (or rather more files, but let's keep it
> simple).
>
> package models
>
> import "github.com/globalsign/mgo/bson"
>
> type Community struct {
> Id bson.ObjectId `bson:"_id,omitempty" json:"id"`
> OwnerId string `bson:"owner_id" json:"owner_id"`
> CategorySlug string `bson:"category_slug" json:"category_slug"`
> Name string `bson:"name" json:"name"`
> Description string `bson:"description" json:"description"`
> Subdomain string `bson:"subdomain" json:"subdomain"`
> Domain string `bson:"domain" json:"domain"`
> }
>
>
> and I essentiall do
>
> ast.Inspect(v, func(node ast.Node) bool {
> switch n := node.(type) {
> case *ast.TypeSpec:
> m.Name = n.Name.String()
> case *ast.Field:
> fmt.Println("******************0")
> fmt.Println("IS_FIELD", n, "END")
> fmt.Println(n.Names)
> fmt.Printf("%+v\n", n.Type)
> switch nn := n.Type.(type) {
> default:
> fmt.Printf("%+v", nn)
> }
> fmt.Println(n.Doc)
> fmt.Println(n.Comment)
> fmt.Printf("%+v\n", n.Tag)
>
> fmt.Println("******************1")
>
> default:
> fmt.Println(n, "END")
> }
> return true
> })
>
>
>
> but you see, Id is type bson.ObjectId and the output of it is different
> from it being a string
>
> &{X:bson Sel:ObjectId}
>
> where a string is just a string with "string" content, at least that's
> what I assume.
>
> What type is "nn" here?
> How do I find that out short of trying all *ast.Types.
> The doc just says
>
> Type Expr <https://golang.org/pkg/go/ast/#Expr> //
> field/method/parameter type
> but "Expr" is a generic term with a description of
> "All expression nodes implement the Expr interface."
> https://golang.org/pkg/go/ast/#Expr
>
> Well carefully browsing the documentation here I can somewhat guess from the
> fields that
> &{X:bson Sel:ObjectId} is a *ast.SelectorExpr
> https://golang.org/pkg/go/ast/#SelectorExpr
>
> but what is a plain field type?
>
> Is there a surefire method to find that out short of typechecking every
> possible type?
>
>
>
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.