The 'go' special form allows 'goto' style branching within 'block' constructs
error: no target for GO
'go' never returns a value. If the 'tag-symbol' exists, then the execution will continue immediately after the'tag-symbol'.
(defun foo (i j)                   ; define FOO
  (prog ()                         ; with a PROG
         (print "begin")
   start (print j)                 ; tag - START
         (setq j (1- j))
         (if (eql i j) (GO start)  ; 2-way branch
                       (GO end))
         (print "hello")           ; won't ever be reached
   end   (print "done")            ; tag - END
         (return 42)))
(foo 1 2)                          ; prints  "begin" 2 1 "done"
                                   ;   returns 42
(foo 2 1)                          ; prints  "begin" 1 "done"
                                   ;   returns 42
Note: Although 'go' will accept a 'tag-symbol' that is not a symbol, it will not find this improper 'tag-symbol'. An error will be generated:
error: no target for GO
See the
go
special form in the