Recently I have written a reading node blog post of "Writing An Interpreter in Go".
After posting the article, I found that the author kindly publish a "lost" chapter - which is about implementing macro features - online. This is really a good chapter, and you can figure out what Macro is, why Macro is necessary in which situations, and how Macro can be implemented.
Here is the PR which implements the macro feature. Just for your information.
By the way, the author has recently tweeted that he gonna publish "Writing Compiler in Go" in the near future. I am really looking forward to it.