Even now, most acceptable uses of GOTOs could be transformed into structured programming, if the appropriate structure were available. However, these structures are numerous and individually of little use, it doesn't make sense to code them just to get rid of the humble GOTO.
What muon2 was talking about is that it's impossible to remove the "goto" type of statement entirely, because anything that disrupts the linear execution of commands must use some sort of "goto" statement. There are no "while", "for", etc. loops, nor are there "if/else" statements, in machine language, which is what all programs eventually become. There's only the "goto" sort of command. Loops, branching statements, etc. in high-level languages like C++ and Java are all simply abstractions that make you unable to royally screw up your program flow through the misuse of "goto" statements. They all get translated into "goto" commands that are executed if a certain condition is true when you compile your program into machine language. So, in this way, it is true that full elimination of the "goto" statement is simply impossible.
However, that does not mean that the
explicit call of a "goto" statement in a high-level language should be allowed. I'm personally of the school of thought that it shouldn't be. While it's true that you can get some marginal benefit in speed if you use it, the danger is way, way too large unless you know exactly what you're doing when you do it, and even then, it makes code very unreadable to have no indentations or anything to set the contents of a loop or a branch statement aside from surrounding code, especially if you have multiple nested types of these statements.