• ú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
    BLAMI
    BLAMI --- ---
    LARS_GUNNER: jako korporat do Go investujeme hlavne kvuli tomu, ze ten jazyk je silny, ale pomerne jednoduchy, nema zadny zbytecny "sugar coating" (tj. kdyz nekdo zkusenejsi napise kod, dopadne to podobne, jako kdyz ten kod napise newhire, protoze to moc jinak nejde - samozrejme pokud myslenka dava smysl), ma dobrou std knihovnu a nevyzaduje pralticky zadny externi tooling (package manager, linter, formatter, compiler, packer i tooly na generovani dokumentace jsou soucasti distribuce).

    Nase 1st class jazyky jsou jinak C++ a Python. C++ je co clovek to mrav a asi u nas ve firme vzdycky bude #1, Python zas problematickej ve financnim odvetvi (rychlost, typing, stav ekosystemu knihoven, runtime dependencies nejsou fajn kdyz to davas zakaznikum). Python ted soupeme spis analytikum jako nahrazku Excelu, systemem napis, pust a zahod na coz je skvely, dlouhodoba udrzba v klicovych sluzbach nam vysla dost draha.

    Muj tym (SRE tym) Go pouziva jednak na innersource CI/CD platformu a tooling pro sidecart sbirani metrik. Go je v SRE svete dost popularni jazyk, je v nem napsany Docker, ekosystem okolo Kubernetes, backend pro Grafanu, Prometheus a dalsi tooly, coz dava nejakou zaruku, ze ten jazyk lze brat vazne.

    TLDR; ten jazyk je nudny a zvladne to co potrebujeme, coz je pro korporat ideal. Nahrazujeme tim Python.
    LARS_GUNNER
    LARS_GUNNER --- ---
    Na co to vlastně používáš? Procházel jsem si možnosti Go a protože dělám kombinaci Python, .NET a C, tak mě nic nenapadá. Láká mě sice nativní concurrency, ale jinak tam zatím nic nevidím. No offence, dost mě to zajímá z pohledu výkonu... ale nevýhody zatím převažují.
    BLAMI
    BLAMI --- ---
    Pekny clanek na posledni dobou dost sklonovane tema "layout" projektu - https://changelog.com/posts/on-go-application-structure
    BLAMI
    BLAMI --- ---
    Prvni plody generics. https://github.com/golang/go/issues/45955 (za posledni roky jsem taky napsal SliceContains asi 20x :D)
    BLAMI
    BLAMI --- ---
    LARS_GUNNER: myslim, ze vzhledem k tomu jak dukladne se to probiralo, tak veskrze pozitivni. Zli jazykove tvrdi ze Go prestane byt jednoduchy a proc to potrebujeme, kdyz to doted slo bez toho...

    Osobne si myslim, ze ze zacatku to bude overused, stejne jako byly channels a contexty, ale casem se to srovna.
    LARS_GUNNER
    LARS_GUNNER --- ---
    BLAMI: Ok, jake jsou ohlasy?
    BLAMI
    BLAMI --- ---
    ...aaand accepted
    spec: add generic programming using type parameters · Issue #43651 · golang/go · GitHub
    https://github.com/golang/go/issues/43651#issuecomment-776944155
    BLAMI
    BLAMI --- ---
    generics draft je oficialni proposal
    A Proposal for Adding Generics to Go - The Go Blog
    https://blog.golang.org/generics-proposal

    JAVAMAN
    JAVAMAN --- ---
    VELDRANE: pouzij libku, Luku (https://github.com/buger/jsonparser treba)
    VELDRANE
    VELDRANE --- ---
    Cus neresil tu nekdy nekdo parsovani dynamickyho nested jsonu, kdy klice nejsou pevne dany ? Mam swagger-doc, kterej parsuju a delam snim naky kouzla ktery prevedu do jinyho komfiguraku. Nakonec sem to nejak sbastlil pres vicenasobny mapy (map[string]map[string]*typ)ale prijde mi to jako strasna prasarna. Vsichni to resej pres interfaces, ale priznam se ze sem to zatim nejak nepobral. Ma nekdo nakej typ na elegantni reseni ?
    RAGNAROK
    RAGNAROK --- ---
    GitHub - gdamore/tcell: Tcell is an alternate terminal package, similar in some ways to termbox, but better in others.
    https://github.com/gdamore/tcell
    NYX
    NYX --- ---
    RAGNAROK: Vemes nil, pretypujes ho na pointer na instanci tveho typu (ale ten pointer smeruje na nil, ne na zadnou konkretni instanci) a to podstrcis te reflexi uvnitr registertype.
    RAGNAROK
    RAGNAROK --- ---
    Jezis tohle jsem hledal dloho. Konecne uz se nebudu jebat z reflectem.
    https://stackoverflow.com/a/34722791
    The Go Playground
    https://play.golang.org/p/gSHXnNTvUn

    Moc teda nerozum syntax na line 21:
    registerType((*MyString)(nil))
    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?
    Kliknutím sem můžete změnit nastavení reklam