Goto is generally an indicator of a bad spot in the overall design, or, in refactoring circles, a "smell". Usually, it indicates a section of code, nowadays usually OO, that attempts to do too much and that hasn't been broken down enough. The issue is that you take a program in one state having followed one path of code, and suddenly jettison it into another path of code. Makes debugging diffcult.
But, it can find controlled use, usually in exception handling. In fact, the try/catch construct and the switch construct are basically gotos.
Read Dijkstra's letter for more...
In fact, I've read that some people believe that the issues surrounding the use of "goto" is one of the impetus for OOP.