So I've never really understood the logic behind this decision and I feel like the excuse that you'd usually find is a cop-out more than an actual reason. The usual reason for not having
goto is because its harmful/dangerous/whatever. However, considering how advanced compilers are nowadays, I have no reason to doubt that examining control flow to verify that goto is used safely and properly isn't that complicated. (If this were about longjmp/setjmp, I'd understand.) A goto is quite useful -- it functions as an absolute jump to the label given. In some instances it makes writing code easier and makes it easier to understand the program flow and avoids code duplication.
Yes, people can right spaghetti code, but that isn't Rusts problem. There is no way to prevent that. Preventing jumps to anywhere in the program is also undoubtedly trivial given that the compiler can use the type system and verify that a borrow has actually been initialized and won't allow you to jump to a label if that hasn't happened, for example. So I'm pretty sure that gotos can be made much, much safer and better, while still allowing people to use it if they want.
So can someone explain to me why goto (still) isn't supported? I know most languages don't but Rust doesn't have to follow that trend.