Depends on your deployment resources. If memories are largely available and the static files (html etc.) are not always changing, you can cache it onto memory the first time you parse.
Otherwise, you can embed into the go binary itself using library like packr and functionalize them for optimum memory management. The drawback is that the binary is usually very large (>100MB) per last experience. The good side is that you had achieve dependency-free in this mode.
Otherwise, parsing is fine. If you need a reference, Hugo is a good example.
I’m referring to how they work on parser, structures, etc.
EDIT:
One good example is their theme module system that successfully separate templates in multiple aspects and “shortcodes” plugin to simplify upper level rendering codes.
Another good example is the split parsing (as in locally and from the theme repository). That way, designers only deal with the HTML parts while leaving your go codes in tact.
If you’re creating a fully compatible parser, you can re-use all the available Hugo themes which saves a lot of time on design codes.