Смотря для каких целей. Если у вас там парсер какой, то goto нормально канает, конечные автоматы... все то где нужно быстро и удобно менять состояния. Можно конечно и без goto но это будет не так эффективно с точки зрения производительности.
В 95% случаев же плохим тоном будет goto, большая вложенность условий, кучи ifelse, switch-case-ы и т.д. Но все же есть случаи когда без этого всего не обойтись.
p.s. если вы обратите внимание на блок "похожие вопросы", там есть пара полезных ссылок.