V poslednim roce jsem si s GO pohraval, kamarad se me ho snazil nasejlovat, tak jsem si zjistit vice. Porovnavam s Java, kterou se zivim vice nez deset let a pythonem, do ktereho jsem byl na par let dostrkan na vedlejsak.
GO:
1. nelze mu uprit jistou miru elegance, ktera je apriori dana vsem nadanym zacatecnikum
2. balickovaci system je strasne "hura" proste odkaz na github, bez verze a pak si to panacku pores sam, tzn peklo pokud delate rozsahlejsi projekt, ktery hromadu funkci a integraci. o rebuildu starsich projektu ani nemluve, pokud nemate ulozeny cely environment ve vcs.
3. svoji "VM" si to cpe primo do exace. V soucasne done ma 'println("hello world")' myslim par mega, pokud se to bude optimalizovat budeme mit 200MB exace, viz nize.
4. je to pomale. asi tak 2x-3x pomalejsi nez java, ktera je (hmm nechci zacit flamewar) asi tak 1.5x-2x pomalejsi nez C(pp) v konkretnich jednoduchych operacich. takze go je asi tak 4x pomalejsi nez native C(pp), takze C pro 21. stoleti... ne-e
5. neni to objektove. Ackoli se o tom neustale vedou spory, tak bylo realne prokazano (za poslednich 10 let), ze bez objektoveho pritupu nevytvorite komplexni aplikaci pri spolupraci tymu 100+ lidi. (eclipse vs world)
6. vetsina "cool" funkci jako "chan" je v podstate k smichu. Jaky je extra rozdil mezi "chan" a Executor.createSingleThreadExcecutor()? v podstate takovy, ze ten kdo pouziva chan, nema poneti o slozitosti okoli. Navic Eecutor je interface, ktery muzete nahradit jinou implemenataci, optimalizovat etc. stejne tak gorutines, multiprocesoring (cripled) for dummies. Jak si rozsirite "chan"? - udelate nad nim nejaky wrapper a jsme tam kde jsme byli.
7. jsou tam pointery. dneska nikdo nechce pointery. Pokud chcete poitery, tak delate v C jednu knihovnu a optimalizujete ji na max protoze je to kriticka zalezitost s velkym dosahem, dekoder kodeku na placenem kompilatoru od intelu, etc. A ten se potom zapoji do... wait for it ... do Javy. Ne v prostredi, kde cokoliv udelate bude tak jako tak 4x pomalejsi.
8. ma to C bindings. naprosta vetsina knihoven v go (krome zakladni), je nejakym wrapperem na Ceckem. a musim podotknout, ze velmi horkou jehlou sitym wrapperem. Tim padem cross jde vlastne dost dohaje a pokud se vyskytne problem, tak vyzaduje znalost C a gdb a valgrid a ... pak to nema cenu delat... viz vyse. Tohle je dost podobne pythonu.
9. vsichni rikaji, ze je lehke si udelat http server a jak je to super. stejne tak jako v node.js. http.server(port). krasa. NE! neni to krasa. tam java zacinala tak pred 20-ti lety. jeden object request, jeden object response, rules the world. NE!NE!NE!. Na solidni aplikaci potrebujete filtery, ktere budou resit encoding, caching, session management, iln18, range requesty, multipart dissasembly.... na to si naprasite vlastni funkce a zjistite, ze ten tomcat nema tech 10 mega jen tak pro srandu. A java to umi taky
http://www.simpleframework.org/doc/javadoc/index.html uplne stejne. Posledni commit nekdy pred 10-ti lety od te doby to vlastne nema chybu. Proc by melo, kdyz je to tak jednoduche. A proto to skoro nikdo nepouziva.
google to tlaci asi jako miliardar tlaci svoje retardovane dite. rad si poslechnu solidni oponenturu.