• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    BLAMIThe Go Programming Language - moderni programovaci jazyk
    BULHI
    BULHI --- ---
    BULHI: hlavni zlepsovak pro me je, ze jsem zacal konecne pouzivat goimports :) sice jsem o tom vedel, ale dokud jsem to nevidel takhle na videu, tak jsem si neuvedomil, jak hrozne me ta hlaska "imported and not used" pokazdy vytoci :))
    BULHI
    BULHI --- ---
    BULHI
    BULHI --- ---
    RAGNAROK: jo ten playground je takhle omezenej.. treba random cisla taky dostanes pokazdy stejnou sekvenci :)
    RAGNAROK
    RAGNAROK --- ---
    Takhle jsem si to nejak predstavoval:
    The Go Playground
    https://play.golang.org/p/OpMYk6K6kvp
    akorat playground pro volani time.Now() vrati vzdycky, jinak to normalne funguje.
    2009-11-10 23:00:00 +0000 UTC m=+0.000000001
    RAGNAROK
    RAGNAROK --- ---
    BULHI:
    ten konstruktor je super. Me napadlo neco podobnyho. Ze bych vytvoril strukturu s parametrama a na te strukture definovat funkci. Zkousel jsem posilat parametry po jinym chanelu ale to mi nefungovalo.

    Dekuji.
    BULHI
    BULHI --- ---
    RAGNAROK: no hele nevim, jestli tomu uplne rozumim, ale timhle tu funkci rovnou zavolas s tema parametrama a predavas pak jeji vystup
    func(10,"abc")


    takze bud teda parametry musis predat pri jejim volani a dostat je tam nejak jinak:
    
    func worker(task func(string)) {
        task("asdf")
    }
    
    printer := func(s string) {
        fmt.Println(s)
    }
    
    worker(printer)
    


    nebo pouzit closure, tj treba nejakej jakoby konstruktor, kde nastavis promenny, takze neco ve smyslu:
    
    func worker(task func()) {
        task()
    }
    
    func createPrinter(s string) func() {
        return func() {
            fmt.Println(s)
        }
    }
    
    printer1 := createPrinter("asdf")
    printer2 := createPrinter("qwerty")
    
    worker(printer1)
    worker(printer2)
    


    v Go ma anonymni funkce pristup k promennejm ve svym scope, coz je myslim stejne napriklad v Javascriptu, ale v PHP to myslim takhle nefunguje.. ale uz si teda nejsem jistej, nejak se mi to zacina plest :))
    RAGNAROK
    RAGNAROK --- ---
    Tady koukam na to jak pridavat joby do fronty.
    Job Queues in Go - OpsDash
    https://www.opsdash.com/blog/job-queues-in-go.html
    Tohle funguje dobre:
    
    func worker(jobChan <-chan func()) {
        for job := range jobChan {
            process(job)
        }
    }
    


    Akorat bych potreboval posilat funcke i s jejich prametrama na to nemuzu prijit jak. Ty parametry by meli mit hodnotu platnou prave v momente kdyz pridam job.
    Napr:.
    
    <-func(10,"abc")
    

    to mi pise ze posilam value a ne funkci. Nevedel by nekdo prosim?
    JAVAMAN
    JAVAMAN --- ---
    tak ale doufam, ze se s tim nepotkam "in the wild" :D https://youtu.be/buJPwD5nW1g?t=112
    RAGNAROK
    RAGNAROK --- ---
    JAVAMAN:
    to vypada nadejne.
    JAVAMAN
    JAVAMAN --- ---
    https://play.golang.org/p/TvkaGy3l1za nejsem moc mimo s pochopenim otazky?
    RAGNAROK
    RAGNAROK --- ---
    CUCHULAIN:
    Problem je ze kdyz pouziju F(i interface{}) tak tam nemuzu naprasit funkci a kdyz pouziju F(g func() []byte) tak tam zas nemuzu naprasit []byte.
    RAGNAROK
    RAGNAROK --- ---
    CUCHULAIN:
    uplne neobejdu jen chci aby funkce F brala jako vstupni parameter bud funkci konkretniho typu napr. func() []byte, nebo [] byte, nebo nic. To jsou 3 konkretni typy. :-)
    Samozrejme ze to muzu napsat jinak akorat by mo to usetrilo hafo kodu.
    CUCHULAIN
    CUCHULAIN --- ---
    RAGNAROK: jinak testovat typ parametru můžeš - https://golang.org/ref/spec#Type_assertions
    CUCHULAIN
    CUCHULAIN --- ---
    RAGNAROK: a určitě to potřebuješ zrovna takhle?
    bylo by potřeba trochu experimentovat, ale určitě to není ideální řešení. např. tím úplně obejdeš typovou kontrolu, která se při vývoji dost hodí :-)
    RAGNAROK
    RAGNAROK --- ---
    CUCHULAIN:
    No ja bych pro priklad chtel aby kdyz zadam:
    a) F(g()) - aby to vracelo furt stejnej cas tj. vyhodnoti se funckce g jednou a pak F pouziva dokoloa tu hodnotu
    b) F(g) - aby funkce vzdycky vyhodnotila funkci g. Tj. melo by to vracet aktualni cas.
    c) F() - aby to nevracelo nic. resp. nejakou default hodnotu.
    CUCHULAIN
    CUCHULAIN --- ---
    CUCHULAIN: teď teda nevím, jestli je to odpověď na otázku, ale alespoň to vrací čas :-)
    RAGNAROK
    RAGNAROK --- ---
    Potreboval bych definovat funkci F ktera jako vstupni parameter bere funkci "g() interface{}", interface{} nebo nic. Jde to nejak?
    Zkousim:
    a) https://play.golang.org/p/cISsisyUORU
    F(g()) - tohle pise porad stejny cas, nebere nic

    b) https://play.golang.org/p/V3k-z4WNax1
    F(g) - tohle vraci adresu pameti, nebere nic

    c) https://play.golang.org/p/4JXlRY47_6k
    tohle bere nic nebo interface
    CUCHULAIN
    CUCHULAIN --- ---
    RAGNAROK: tak dobrý :-)
    pokud to nepotřebuješ zaokrouhlit na nějaký extrémně vysoký počet des. míst, mělo by to stačit.
    RAGNAROK
    RAGNAROK --- ---
    CUCHULAIN:
    To je divne, dekuji za vyzkouseni. Me to meri tak ze ta tvoje funkce trva ~80 ns a ta moje ~1000 ns.
    Kliknutím sem můžete změnit nastavení reklam