• ú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
    ADMIX
    ADMIX --- ---
    BLAMI: symlink farm! stravil jsem dneska asi hodinu a pul debugovanim jedny a mam chut se zastrelit. Nejdriv zastrelit nekoho jinyho, ale pak i sebe :D

    ty staticky binarky do kontejneru jsou bozi, v $job-1 jsem delal cloud-native prototype nad nomad/rkt a prvni image byly nakej base OS, ale pak jsem zjistil ze Go binarku do toho proste das jednu a vono to jede, to byly casy s CoreOS :)
    BLAMI
    BLAMI --- ---
    VELDRANE: jo staticky binarky jsem opomenul. Ve financnim svete je v mnoha pripadech cloud nebo VMs tabu (soucasti regulace je casto bare metal na kterym to bezi) a sdilet runtime zavislosti s deseti dalsima tymama co jedou jinak rychle a cekat kdy Ti kdo co rozbije, not fun.
    VELDRANE
    VELDRANE --- ---
    LARS_GUNNER: Pokud delas infra admina nejake microservice platformy jako k8s, docker apod tak je go presne co potrebujes. Dobre se v tom pisou vsemozne tooly, jednoduche api apod. K dispozici mas nativni knihovny treba pro zmineneho promethea, takze kdyz pises nejaky apicko apod neni problem rovnou pridat prometheus metriky. Spousta toolu nebo sdk pro kubernetes je napsana prave v/pro go.

    V posledni dobe se treba hodne sklonujou operators pro k8s/ocp coz jsou v podstate udelatka, ktery nejak komunikuji s k8s api a nebo reaguji na zmeny stavu primo v nem. Primarni sdk je v go (jasne operator napises i v jinym jazyku).

    Hezky se v tom pisou ruzna restapi a to at uz pomoci nativnich knihiven nebo treba sofistikovanejsich frameworku jako je treba goa.

    Velkou vyhodu vidim i ve statickym linkovani by default. Jednak neresis jestli franta kterymu posilas svuj tool ma stejnou verzi knihovny “pycus” jako ty, ale hlavne kdyz chces svou aplikaci soupnout treba do konterjneru a udelat z nic docker image, tak je to easy. Proste si vemes base image nebo ubi dle tveho gusta, pridas binarku a poustis docker build. Neresis zavislosti, nepises 1000+ radkovej docker (ano i takovej mam - buildi mi custom verzi nginxu).

    Na druhou stranu, mam kamose co dela binary analysis a ten by Ti dal tucet argumentu proc je golang zlo :))
    LARS_GUNNER
    LARS_GUNNER --- ---
    BULHI: Javascript je jazyk, ktery bude neustale vzrustat a jeho uziti pujde cestou multiparadigmatu. Nejslibnejsi jazyk pro juniory. Ale to sem nepatri.
    BULHI
    BULHI --- ---
    Jeste bych dodal z pohledu web backendu - hlavni hrac je dneska bohuzel Javascript/Node, kde teda jednak Javascript je tragickej jazyk, navic npm dependency hell, kde porad neco nefunguje, nekompatibilni zavislosti, knihovny opusteny vyvojarema atd. Go je naopak, jak uz bylo zmineno, pomerne jednoduchej jazyk, kterej se da rychle naucit, nemusis si pamatovat dvacet tisic gotchas. Celej ekosystem je pomerne zdravej, cemuz asi dost pomaha ta silna standardni knihovna, ktera napriklad obsahuje i http server. S cimz souvisi dalsi vyhoda oproti vsem skriptovacim jazykum obecne, ze to cely zkompiluju do binarky a nemusim resit prostredi, napr. ze je na serveru nejakej webserver, kterej mi nevyhovuje, stara verze PHP, nebo chybi extensions, ktery potrebuju a podobne.
    ALMAD
    ALMAD --- ---
    LARS_GUNNER: Já si teda s Go jenom hraju, ale naše SRE si Go pochvalovalo jednak z důvodu co píše BLAMI, druhak pak to že u hromady malejch utilit byl ten výkonnostní rozdíl fakt poznat (proti node a pythonu), jako třeba log forwarding. A ono člověku na rychlosti nezáleží moc, dokud to neni rychlý a nemá se vracet :D

    Druhej aspekt pak je že v dockerizovanym světě najednou docela záleží na velikosti těch imagů a go vrazíš do podstatně menšího balíku. A ona ta velikost dost ovlivňuje všechny operace a z mojí zkušenosti se to dost posčítá.

    A osobně po něm pokukuju mj. proto, že teď přepisuju jeden střední člověk do Pythonu 3 a...Python je furt můj neoblíbenější jazyk po stránce syntaxe a takový tý všeobecný filozofie, ale fakt začíná bejt složitej jak C++ rádio. Já bych si to ani neuvědomil, protože v něm dělám od 2.4 a nabírám ty změny inkrementálně, ale ten přepis dělám s pár dobrovolníkama co nejsou profi programátoři a to je dobrej feedback loop. "No tohle je vlastně protože" sem za poslední dva měsíce řek fakt hodněkrát. A "import this" ti furt napíše "There should be one-- and preferably only one --obvious way to do it.", ale tady máš osm způsobu jak flatnout list listů (ano, je to napůl vtip, podobnej článek se dá napsat o spoustě jazyků, ale přijde mi že se prostě Python posouvá na tu heavyweight část)
    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 :))
    Kliknutím sem můžete změnit nastavení reklam