GOTO is a statement of the early beginnings of programming. It is rarely used in high-level code today. Code that makes use of it is called Spaghetti code by some people. I have almost never seen goto statements in code, so I've been curious about them.

Python ¶
Python does NOT offer GOTO. However, somebody made a GOTO module for April Fools' Day. See goto
in Python if you're still interested.
Java ¶
Java has no goto statement. Studies illustrated that goto is (mis)used more often than not simply "because it's there". Eliminating goto led to a simplification of the language--there are no rules about the effects of a goto into the middle of a for statement, for example. Studies on approximately 100,000 lines of C code determined that roughly 90 percent of the goto statements were used purely to obtain the effect of breaking out of nested loops. As mentioned above, multi-level break and continue remove most of the need for goto statements.
Source: java.sun.com
C++ ¶
GOTO works in C++. Here is a minimal example:
Minimal Example ¶
#include <iostream>
using namespace std;
int main(){
int test = 0;
start:;
if (test > 10) {
goto end;
} else {
test += 7;
goto start;
}
end:;
cout << "test: " << test << endl;
return 0;
}
Output:
test: 14
Euclidean GCD algorithm ¶
Most of you might know the euclidean algorithm for calculating the greatest common divisor in a version like this one:
#include <iostream>
using namespace std;
int euclidGCD(int a, int b) {
while (b != 0) {
int m = a % b;
a = b;
b = m;
}
return a;
}
int main(){
// Outputs 20
cout << "GCD of 340 and 32760: " << euclidGCD(340, 32760) <<endl;
return 0;
}
Here is a goto-version that works perfectly fine:
#include <iostream>
using namespace std;
int euclidGCD(int a, int b) {
if (b > a) goto b_larger;
while (1) {
a = a % b;
if (a == 0) return b;
b_larger:
b = b % a;
if (b == 0) return a;
}
}
int main(){
cout << "GCD of 340 and 32760: " << euclidGCD(340, 32760) <<endl;
return 0;
}
Source: literateprograms.org
Try bad things ¶
You can't jump into a function:
#include <iostream>
using namespace std;
int myFunction(int i) {
i += 1;
inFunctionLabel:;
i += 1;
return i;
}
int main(){
int test = 0;
goto inFunctionLabel;
cout << "test: " << test << endl;
return 0;
}
Compiler error:
gotoExample.cpp: In function ‘int myFunction(int)’:
gotoExample.cpp:7: warning: label ‘inFunctionLabel’ defined but not used
gotoExample.cpp: In function ‘int main()’:
gotoExample.cpp:15: error: label ‘inFunctionLabel’ used but not defined
So goto is at least bound to its scope.