Go has a quasi macro system though (go generate)
https://gradha.github.io/articles/2015/01/the-day-go-reinven...
I like the macro systems in Crystal and Haxe (reifed macros)
https://haxe.org/manual/macro-reification-expression.html
https://crystal-lang.org/reference/1.8/syntax_and_semantics/...
I think C would have benefited from such system at the AST level instead of text substitution.
Javascript is dynamic enough there is absolutely no need for Macros.