Přidal bych pár drobností, které nebyly v článku explicitně zmíněny (nebo mi utekly).
Metody mohou být definovány nad libovolným typem, ne jen nad strukturou. Velmi známý je příklad HandlerFunc z balíku net/http:
type HandlerFunc func(ResponseWriter, *Request) func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request)
ale platí to i pro práci s hlavičkami z téhož balíku:
type Header map[string][]string func (h Header) Add(key, value string) func (h Header) Del(key string) func (h Header) Get(key string) string func (h Header) Set(key, value string)
Ti hloubavější si za domácí úkol mohou vyřešit problém, proč u metod Add, Del a Set není potřeba pointer receiver.
Co se týče interfejsů, chyběla mi zmínka, že v Go jsou velice populární jedno metodové interfejsy (narozdíl třeba od Javy). Co může pro neznalého na první pohled vypadat jako nesmysl v sobě skrývá velké kouzlo. Pokud třeba vezmeme jeden z nejpoužívanějších io.Reader , který implementuje stream dat pro čtení, stačí vám pro vaše konkrétní data implementovat jedinou metodu Read(p []byte) (n int, err error) a můžete využít cokoliv, co jako parameter používá io.Reader, třeba io.Pipe, větvení, šifrování, přenos po síti atd. Pokud pak chcete s daty dál pracovat, logicky musíte implementovat i sesterskou funkci Write(p []byte) (n int, err error), která uspokojí interfejs io.Writer.
A na závěr bych zmínil dokumentaci (omlouvám se, pokud náhodou byla zmíněna v některém z předchozích dílů). Dokumentace je v Go integrována přímo do zdrojových kódů, včetně možnosti vytvoření funkčních příkladů a možnosti jejich online spuštění. Funkčnost příkladů je možné testovat. Dokumentace je až spartánsky jednoduchá, chvíli člověku trvá, než si na ni zvykne, ale po zkušenosti se všemi těmi doxygeny musím říct, že má obrovské kouzlo a teď na ni nedám dopustit.
A na úplný závěr Díky za seriál.
> Co se týče interfejsů, chyběla mi zmínka, že v Go jsou velice populární jedno
> metodové interfejsy (narozdíl třeba od Javy).
Bývávalo, Java už je pro spoustu případů podporuje a preferuje taky:
https://www.baeldung.com/java-8-functional-interfaces
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
Dobrý den, děkuji za úvod do gorutin. Jen stále nemám jasno jaký je vztah mezi gorutinou a vláknem (ve významu pthread? Minule mi otloukli o hlavu, že jsem nepochopil gorutiny. Existuje-li však 1:1 mapování mezi vláknem a gorutinou, tak to je asi tak to samé jako new Thread("", () -> můjkód).start() v Javě. Kde tedy leží to kouzlo efektivity? Děkuji.
Vztah mezi gorutinami a vlákny je typu M : N, to znamená že runtime mapuje M gorutin do N vláken. By default Go runtime alokuje tolik vláken, kolik mu operační systém řekne, že je k dispozici CPU (lze samozřejmě změnit).
N se na běžných počítačích pohybuje v jednotkách, u M nejsou problém desetitisíce i víc. Velice jednoduché, rychlé a paměťové nenáročné přepnutí kontextu mezi gorutinami je také důvodem, proč má Go jinou volací konvenci, než je zvykem u jiných programovacích jazyků, což zase zvyšuje složitost použití třeba C knihoven.
Dobrý den,
opravil jsem to všude, tedy jak v článku, tak i v repu (https://github.com/tisnik/go-root/commit/88b95f51f8bd68ddf41665d2584c016d1fccb199)
Díky za upozornění! Já mám totiž font, kde je to dobře čitelné, ale na webu to samozřejmě není tak snadno konfigurovatelné, takže to skutečně může být matoucí.
Díky.
Obávám se, že to jednoduše nepůjde, protože to neumí redakční systém (přece jen vznikl spíš pro weby typu Vitalia a Měšec :-). Na Fedora.cz to například funguje samo na základě detekce jazyka (https://mojefedora.cz/uzitecne-knihovny-a-moduly-pro-python-kresleni-a-pokrocile-manipulace-s-obrazky-v-knihovne-pillow/#k10), na Rootu bohužel ne.
Můžu ještě vyzkoušet, co redakční systém udělá s výstupem z Vimu (série tagů font color="#xyz"), ale tady je bohužel opět problém - HTML se v systému nějak normalizuje a spousta "divných" značek se vyhodí!
Otázka pro Petra Krčmáře - myslíš, že by ^ šlo nějak ohnout?