Sure, C gotos are the cleanest solution in a few specific cases and sometimes I get frustrated in higher level languages that lack it.
However I still demonise gotos when teaching coding because it should be use carefully and sparingly. New programmers often see it as a versatile stick that can solve all their problems, and while it can make the code "work" we moved on from spaghetti code for a reason.
My personal rule is that a goto should only ever go down the code and never into new blocks.
(except for implementing a try/catch system using longjump, every rule has an exception...)