Pekny clanok.
V priklade
https://github.com/tisnik/go-root/blob/master/article_05/18_switch_on_string.go
chyba klucove slovo fallthrough za case help:.
...
case "help":
fallthrough
case "info":
...
Zajímavé je, že ten placeholder _ nejde použít jako běžná proměnná ("cannot use _ as value"). To je dobře. Ale nenašel jsem, jak se to řeší pro dvě vnořené smyčky, když nebudu potřebovat jejich indexy.
Jinak ten switch-case je vymyšlenej skvěle, hlavně možnost tam rvat podmínky. IMHO lepší než if-y za sebou :-)
V podstate https://tour.golang.org, akorat cesky. Jaka je pridana hodnota?
Ještě nějaké další hloupé otázky?
Tentokrát trochu se zpožděním a navíc se jedná jen o "štěky" :).
1. Co se týče mrtvého kódu (kap. 3), v první chvíli jsem si říkal, že to přece není možné, protože mrtvý kód jsem občas nucen při ručním ladění zakomentovávát a je to otravné. Go překladač mrtvý kód sice umožňuje, ale snad všechny editory automaticky instalují gometalinter, který má jako jeden z linterů detekci mrtvého kódu. Takže doplnění povzdechu na konci třetí kapitoly: ano je to tak standardní, že jsem si v první chvíli ani neuvědomil, že to hlasí linter a ne překladač.
2. A tenhle bod je už vyloženě subjektivní. V tabulce s typy pro iteraci přes for range bych osobně u typu kanál dal křížek spíše do prvního sloupce a samotnou hodnotu až do druhého sloupce. První hodnota je totiž vždy index a druhá hodnota pak samotná hodnota prvku (přesněji kopie hodnoty, což vyplývá ze symbolu přiřazení). A protože index u kanálu nemá smysl, tak se nevrací. To rozdělení na index a hodnotu má hlubší význam. Pokud chci v těle cyklu pracovat s immutable hodnotami, index ignoruji, pokud z nějakého důvodu potřebuji modifikovat originální proměnné, pracuji s indexem. Nakonec jen doplnění, že druhou hodnotu lze tiše vynechat a psát for i := range []string{"jedna", "dva", "tři"} { ... } místo for i, _ := range []string{"jedna", "dva", "tři"} { ... }
A teď na závěr si uvědomuji, že se z článku trochu vytratil podrobnější popis iterace přes řetězec, což je škoda. Pokud k řetězci přistupuji přes meze, přistupuji na konkrétní byte. V ASCII je to fuk, ale u Unicode znaků ne. Pokud chci postupovat po jednotlivých Unicode znacích, musím použít for range nebo systémovou knihovnu strings.