notes for `go.type_assert( A, self)` where A could be an empty interface or pointer to a struct,
fails with hack using reflect and type switch because the Go compiler will not allow the case the
invalid case (even if it never happens at runtime).  TODO: internally track the type of `A`, or run the output code two times through the Go compiler to see which variables are structs or interfaces from errors printed to stdout.
fixed type assert an interface{} or struct pointer to some struct pointer type.