I use the Multibreak package every time I need to break out of two loops, but I may be biased.
I suspect using a helper variable for the control flow is the most common solution, unless it’s easy to place the loops in a subfunction you can return from or you can loop over multiple variables in a single for loop (in which case a single break
suffices). I rarely see the @goto
and @label
macros in the wild and when I’ve seen them it has been for more complex control flow than just breaking out of two loops.