Here is hard 100% PROOF that the goto method is BAD.
Load this alias:

alias blah {
goto $1
:1
echo -a 1 is a 1
goto end
:2
echo -a 1 is a 2
goto end
:$1
echo -a I don't know what 1 is
:end

goto $2
:1
echo -a 2 is a 1
goto end
:2
echo -a 2 is a 2
goto end
:$2
echo -a I don't know what 2 is
:end
}

Now type /blah 1 1 you get an infinite loop of "1 is a 1" because the labels conflict. Now try /blah 3 4, you get "* /goto: duplicate '1' found". On the other hand,

alias blah {
switch ($1) {
case 1:
echo -a 1 is a 1
break
case 2:
echo -a 1 is a 2
break
default:
echo -a I don't know what 1 is
}

switch ($2) {
case 1:
echo -a 2 is a 1
break
case 2:
echo -a 2 is a 2
break
default:
echo -a I don't know what 2 is
}
}

That would work fine. But I guess it takes a "mighty C coder" to see that HUGE flaw.