Hlavní navigace

Názor k článku Rozhraní, metody, gorutiny a kanály v programovacím jazyku Go od ivoszz - Přidal bych pár drobností, které nebyly v článku...

Článek je starý, nové názory již nelze přidávat.

  • 11. 12. 2018 3:18

    ivoszz

    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.