This project is archived and not maintained. There is a better implementation
and solution in the
golang.org/x/tools/go/ast/astutil
package that you can use.
astrewrite 
 
astrewrite provides a Walk() function, similar to ast.Inspect() from the
ast package. The only difference is that the passed walk function can also
return a node, which is used to rewrite the parent node.  This provides an easy
way to rewrite a given ast.Node while walking the AST.
Example
package main
import (
	"bytes"
	"fmt"
	"go/ast"
	"go/parser"
	"go/printer"
	"go/token"
	"github.com/fatih/astrewrite"
)
func main() {
	src := `package main
type Foo struct{}`
	fset := token.NewFileSet()
	file, err := parser.ParseFile(fset, "foo.go", src, parser.ParseComments)
	if err != nil {
		panic(err)
	}
	rewriteFunc := func(n ast.Node) (ast.Node, bool) {
		x, ok := n.(*ast.TypeSpec)
		if !ok {
			return n, true
		}
		// change struct type name to "Bar"
		x.Name.Name = "Bar"
		return x, true
	}
	rewritten := astrewrite.Walk(file, rewriteFunc)
	var buf bytes.Buffer
	printer.Fprint(&buf, fset, rewritten)
	fmt.Println(buf.String())
	// Output:
	// package main
	//
	// type Bar struct{}
}