Goto

V allows unconditionally jumping to a label with goto. The label name must be contained within the same function as the goto statement. A program may goto a label outside or deeper than the current scope. goto allows jumping past variable initialization or jumping back to code that accesses memory that has already been freed, so it requires unsafe.

  1. // ignore
  2. if x {
  3. // ...
  4. if y {
  5. unsafe {
  6. goto my_label
  7. }
  8. }
  9. // ...
  10. }
  11. my_label:

goto should be avoided, particularly when for can be used instead. Labelled break/continue can be used to break out of a nested loop, and those do not risk violating memory-safety.