• ú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

    Go is an open source programming environment that makes it easy to build simple, reliable, and efficient software.

    Pro vyhledavani clanku/blogu/informaci o Go v Google je potreba misto vyrazu "Go" pouzivat "Golang".

    Web:
    golang.org - ofic. www stranky projektu Go
    Go Playground - piskoviste na vyzkouseni Go
    blog.golang.org - ofic. blog projektu Go
    pkg.go.dev - vyhledavac knihoven a dokumentace
    Awesome Go - seznam oblibenych projektu, knihoven a blogu

    Literatura:
    The Way To Go: A Thorough Introduction To The Go Programming Language (Ivo Balbaert)
    Programming in Go: Creating Applications for the 21st Century (Developer's Library) (Mark Summerfield)

    Komunita:
    Slack Gophers - server pro uzivatele a skupiny okolo projektu v Go
    rozbalit záhlaví
    AMBIENTIUM
    AMBIENTIUM --- ---
    DRUDRIGER2: jj jsem bejvalej phpkář a na doctrine jsme jeli v pohodě. Když je normalizovanej relační model, tak na to doctrine nasedne dobře a těch více entit v agregátu propojila hezky (např. objednávka + položky ale i různé mn vazby apod.). O něco podobnýho se snažim v Go a jde to hezky.
    Teď pracujem na základu systému v Go, hexagonální architektura, cqrs, outbox pattern, eventy… appka jede jako api, jako outbox publisher nebo jako consumer, v samostatnejch k8s deploymentech, aby se to dalo různě škálovat. Je tam ještě nějaká práce a pak máme tři témata, a uchopíme nejspíš to, pro který máme zákazníky. Nemůžu rozkývat detaily bohužel, asi můžu říct že tohle bude velkokapacitní messaging…což asi nemusí znít nijak fancy, ale je tam prostor, něco udělat.
    DRUDRIGER2
    DRUDRIGER2 --- ---
    AMBIENTIUM:
    no ja mel za ucitele nebo sefa par let cloveka, sileneho autistu, ktery naprogramoval v php i konzoli i vlastne CML s nasazovani, vse samozrejme v php. a vse tak slozite ze to neslo, po par letech sem do toho bouchnul a jedu cestou cim jednoduseji tim lepe.
    nejsem sice odpurcem oop, ale hledam jine cesty.
    priklad delam report appku a vim ze reporty se stale meni a konci a vznikaji nove, tak mam co report to adresar a i kdyz v nem sou veci cou by se dali sdilet napric ostatnima, tak proste ne, veci sou doublovane, ale pak jen staci smaznout jeden adresar kde je report a vse je vyreseno. nic nechby nic neprebiva.
    ale jde o uhell pohledu samozrejme. a kazdy by danou vec resil jinak.

    Ohledne orm a mapovani.
    no symofny a doctrine vesmes umoznovala jen mapovat co entita to tabulka v db. ale todle casto neplati
    a obcas chces mit entitu jakoby nad vice tabulkama a to v doctrine/symofony moc dobre neslo.
    prave v golangu si udelam struct anamapuji si to jak chci najoinovane tabulky. ano je pravda ze to mapovani je slozitejsi, ale priklad pro muj ucel to bylo dost uzitecne...
    Tak se ti team snad rozroste.
    Co delate za project/product.?
    AMBIENTIUM
    AMBIENTIUM --- ---
    DRUDRIGER2: díky. právě no, já počítám s tím, že se mi team postupně rozroste a bude potřeba to strojově trochu ohlídat a zároveň si ušetřit ty mapovací boilerplaty…
    DRUDRIGER2
    DRUDRIGER2 --- ---
    AMBIENTIUM:
    jako vypada to dobre.
    ja po zkusnostech s php a symfony a doctrine, pojimam golang tak, se snazi delat co nejmensi zavyslosti atd, takze gorm nepouzivam a jedu cisto jen normalne ciste mapovani. a na vetsine projektu delam sam, takze se nebojim ze nekdo sahne kam nema.
    AMBIENTIUM
    AMBIENTIUM --- ---
    Udělal jsem linter na hlídání přímýho zápisu do struct properties u vybranejch struktur. K čemu to má bejt dobrý viz description.
    Tak kdyby se to třeba někomu hodilo…. Feedback vítán.

    GitHub - digitalstraw/propro: Golangci-lint plugin for protecting exported properties of entities.
    https://github.com/digitalstraw/propro
    DRUDRIGER2
    DRUDRIGER2 --- ---
    DONDI: no v ukazce jen vlastne jen seznam kapitol coz si cenim, ale preferoval bych ze z nekterych kapitol sou tam ukazky. takhle znam jen obsah...
    takze sem spise ocekaval recenzi nekoho kdo si to uz procetl..
    na druhou strnku, autorove clanky znam a vim co muzu zhruba cekat..
    DRUDRIGER2
    DRUDRIGER2 --- ---
    ma nekdo t knihu doma.?
    S golangem delam uz asi dva roky denne, a zajima mne jestli tma najdu neco noveho, nejaka recenze by bodla.
    SPIKE411
    SPIKE411 --- ---
    V edici CZ.NIC vychází nová kniha Pavla Tišnovského o jazyku Go - Root.cz
    https://www.root.cz/zpravicky/v-edici-cz-nic-vychazi-nova-kniha-pavla-tisnovskeho-o-jazyku-go/

    Programovací jazyk GO - Edice CZ.NIC: knihy nejen pro IT odborníky - knihy
    https://knihy.nic.cz/cs/detail/65/
    DRUDRIGER2
    DRUDRIGER2 --- ---
    V go delam ted skoro v kuse. Ale.az k té to.trem teckam.sem.jeste nedostal. Jinak za mne prechod od php k go sem jen vdecni.. Nejtezsi to asi Bo vysvetlit ve vedení. Kazdpoadne za mne go je super.
    DANIELSOFT
    DANIELSOFT --- ---
    tak se mi povedlo zvojtit reakci na jednu featuru v Golangu

    když je v signatuře funkce
    fce(něco, něco, options ...Option)

    tak ty tři tečky jsou proměnný počet parametrů typu Option, čili nějaké nepovinné parametry

    já tam pražádné neměl, tak jsem tam dal nil - a byl překvapen segfaultem null pointer exception

    seniorní goučkař mě nasměroval, že v tomto případě tam ten parametr nemám vůbec uvádět, ani nil, a nespadne to. a vskutku :)
    DANIELSOFT
    DANIELSOFT --- ---
    Tak jsem ondyno dneska přidával testy do projektu a "go test" řvalo, že je špatná cmdline volba "-t". Seniorní kolega si všiml, že mám na flagy balík "kingpin", který je přesložitělý (a já ho tam měl z lenosti, protože jsem to copypastnul z projektu, který jsem kanibalizoval), tak mi poradil změnit "kingpin" na "flag" - a místo "kingpinu" si na to samé stěžoval "flag"

    tak jsme s druhým seniorním kolegou přišli na to, že chyba byla volat kingpin.Parse() respektive flag.Parse() v init() místo main(), protože pak dostane cmdline volby z testovacího enginu a je z toho zmatený, přesun do main() (který vyžadoval předělání nějakého kódu) pomohl
    CUCHULAIN
    CUCHULAIN --- ---
    DANIELSOFT: no bodejť. problém je v tom, že se kód pokouší přes := znovu deklarovat s.SampleField.
    DANIELSOFT
    DANIELSOFT --- ---
    ahoj, připadá mě, že jsem asi narazil na chybu v Golangu, nebo možná jsem jen příliš "rozežranej" co se týče toho, co po něm chci


    package main

    type SampleStruct struct {
    SampleField int
    }

    var s SampleStruct

    func returnIntErr() (int, error) {
    return 42, nil
    }

    func main() {

    // $ go run gostructerr.go
    // # command-line-arguments
    // gostructerr.go:15:5: non-name s.SampleField on left side of :=

    //!
    //s.SampleField, err := returnIntErr()

    var err error
    s.SampleField, err = returnIntErr()

    println(err)

    }



    ten řádek za tím //! se nezkompiluje (když ho odkomentujete), imho by měl přiřadit do s.SampleField a zároveň vytvořit/deklarovat proměnnou err. takhle to vypadá, že ":=" umí, kromě vytváření nových proměnných, přiřazovat jen do proměnných a ne do položek struktur, což mi přijde neortogonální, workaround, který se přeloží, následuje

    je to očesaný reproducer z reálného projektu, kde jsem si rval vlasy, proč to nefunguje: ještě jsem to postnul do interních pracovních fór a na okouna a zítra uvidím, kdo mi co kde řekne
    BLAMI
    BLAMI --- ---
    DRUDRIGER2: Ja moc web appky nedelam, pracuju jako SRE ve fintechu a vetsina mojich vytvoru jsou ruzny CLI tools pro developery a demoni na telemetrii.

    Co se bundlovani tyce, ja nejsem moc zastancem, protoze to neskaluje treba s pouzitim CDN kdy mas ty assety servirovany uplne odjinud nez tu logiku co obstarava binarka.
    DRUDRIGER2
    DRUDRIGER2 --- ---
    BLAMI: Jo dik. ja sem nad tim premyslel a jo to dava smysl. ze namisto toho priklad git reseni se pouziva reseni na zklade deb balicku. clovek to muze lechce vratit zpatky , distribuovat a podobne srandicky ktere je potreba.
    Jo dik za jini pohled .
    se mozna jeste zeptam jen teoreticky mozna s tim mas taky zkusenost. kdyz se dela apka v go a je to nejakej ewb, co je vyhodnejsi nechat ty css a html sablony v binarce a nebo je mit venku zvlast jako soubory.
    Jasne je ze kdyz je to v binarce lepe se to distribuuje. a zase naopak kdyz je to ven z binarky tak se to lechce vyviji a nemusis kvuli kazde uprave v html ci v css delat compliaci binarky.
    Oba pristupy maji svoje plus i svoje minus. co se v praxi vice pouziva.?
    A mozna to si jen fabuluji se pouziva nejake postup, kdy pri vyvoji jedes ty soubory venku a kdyz se to dodela tak se stanou soucasti binarky....
    BLAMI
    BLAMI --- ---
    DRUDRIGER2: jo, to jsem presne myslel. Deb balik jako takovej ti pochopitelne systemd nevyresi, to musis udelat sam, ale vyresi veci jako upgrady/rollbacky. Na systemd jsou tam helpery co pomuzou tu servicu restartovat treba pri tech upgradech. Viz. https://wiki.debian.org/Teams/pkg-systemd/Packaging
    VELDRANE
    VELDRANE --- ---
    DRUDRIGER2: vzhledem k tomu ze to sou vsechno microservisy v kubernetes tak to resim helmem
    DRUDRIGER2
    DRUDRIGER2 --- ---
    dekji za odpoved.
    Co tim myslis distribucni balicek svoji distribuce.?
    Myslis jako udelat si priklad v debianu vlastnej .deb balicek tej mojej aplikace.? a to mi pohlida vsehcno ohledne systemd atd.
    myslel si to tak.?
    BLAMI
    BLAMI --- ---
    DRUDRIGER2: systemd neni na deployment ale na lifecycle management. Ono zalezi jak (co je unit of deployment) a kam to deplojujes
    - jestli na nejakou VM s Linuxem co mas cely pod kontrolou - v takovym pripade bych volil distribucni balik distribuce, kterou pouzivas
    - do cloudu - tam zalezi na providerovi a runtimu ale typicky chces nejakej nemennej setup (docker kontejner, vm image, k8s deployment unit + kontejner)

    Co se tyce toho jak tu unit of deployment vytvorit, tak zase zalezi kde mas kod a jaky jsou tam procesy. Je tuna moznosti od selfhostovanyho Jenkinse, Drone CI nebo jinyho z milionu CICD reseni, pres Github Actions a Gitlab CI/CD az po nejaky udelatka co ma treba Amazon nebo GCP.
    Kliknutím sem můžete změnit nastavení reklam