• ú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
    DANIELSOFT
    DANIELSOFT --- ---
    ahoj, existuje nějaké dobré volně šířitelné stažitelné PDF s Go? ale nechci aby tam byly jenom úplné základy (jako Gobook z prvního linku z googlu) ale víc do hloubky pro člověka, který předtím dělal v C++ (není podmínkou, aby to PDF srovnávalo C++ a Go, ale různé detaily kolem interfaců, duck typing a standardní knihovny, tj. ekosystému by byly super.
    REDGUY
    REDGUY --- ---
    V Pure Storage poradame Go Meetup: 31.8., 17:30, Rohanske nabrezi 661/5
    Go Meetup Tickets, Wed, Aug 31, 2022 at 5:30 PM | Eventbrite
    https://www.eventbrite.com/e/go-meetup-tickets-405296190817

    A nabirame Go vyvojare do Portworkx tymu (integrace nasich storage krabic do Kubernetes). Skvela firma, skvela prace, kdyby to nekoho zajimalo, at se ozve 8)
    VELDRANE
    VELDRANE --- ---
    GIX: Mno ja sem prave gorutiny do ted nepotreboval, paac bud to za me udelal nakej framework a nebo mne slo spis o ty knihovny, ktery se v golangu vazou na ekosystem kolem kubernetes. Nejsem programator! Obcas ale potrebuju naky ty systemovy integrace no :), sem tam taky neco pacham k IoT a prijde mi ze tenhle koncept (periodickej worker na backgroundu, kterej pripravuje data pro publikovanimpres rest) musi bejt vcelku castej a bez mutexu se to nejspis neobejde.

    Jeste me napadlo jit na to pres dve active<->backup memory regiony. (mit tu public structure 2x)Zkratka ze bych publikoval data z jiny oblasti nez do ktery by zapisoval pri dalsim behu worker paac tech dat neni tolik. A pri zapisu bych jen switchnul pointery (coz by stejne asi chtelo mutex)

    Kazdopadne diky za tip, v ramci selfstudy to zkusim nabastlit pres ten sync balicek a mutexy.
    GIX
    GIX --- ---
    VELDRANE: ty reci o komunikaci misto sdileni se datujou do prvnich let go, kdy se vsichni snazili naroubovat vsechny problemy na kanaly.
    z cehoz imho komunita dost vystrizlivela. (asi kazdej zacatecnik v go si projde fascinaci goroutinama, kdy dela z jednoduchejch problemu monstra propojeny kanalama, aby zjistil, ze v 99% pripadu je lepsi pouzivat je jen na trivialni synchronizaci pri ukonceni behu goroutiny)

    pouzivej balicek sync. konkretne sync.Mutex, popripade RWMutex je asi pro tebe vhodnej.

    kdyz si prolezes standardni knihovnu, tak sync se pouziva vsude mozne (treba http.Server). atomic spis vyjimecne(i kdyz je i v tom http.Server).
    VELDRANE
    VELDRANE --- ---
    NYX: Diky moc, zkusim nastudovat nicmene jedna z prvnich vet dokumentace “… These functions require great care to be used correctly” me trochu desi ;)
    NYX
    NYX --- ---
    VELDRANE: Muzes pouzit treba sync/atomic a SwapPointer.
    VELDRANE
    VELDRANE --- ---
    Zjistuju ze mam silny mezery ve vzdelani a nevim jak spravne uchopit nasledujici problem: Mejme jednoduchou aplikaci, ktera publikuje nejakou datovou strukturu pres rest jako json. Tato datova struktura(resp muze to bejt klidne jeji kopie) se plni nezavislym taskem (ale v ramci aplikace), ktery se pousti v nakem intervalu (rekneme co 5 minut). Vsichni pisou ze sdilet pamet je spatne, locky jsou spatne atd. Jak to tedy uchopit ?

    Proc to chci:

    Chci publikovat naky data z jednoho zdroje a zaroven chci ten zdroj ochranit pred klient stormem. Tzn jednou za par minut si zjistim data a ty pak publikuju frontendu.
    RAGNAROK
    RAGNAROK --- ---
    json->struct
    JSON-to-Go: Convert JSON to Go instantly
    https://mholt.github.io/json-to-go/

    skoad ze to je web a ne binarka
    MYSUNK
    MYSUNK --- ---
    pozice Go vyvojare stale aktualni, vhodne i pro mediora: https://www.startupjobs.cz/nabidka/36366/go-developer-medior-senior-remote
    MYSUNK
    MYSUNK --- ---
    Golang developer wanted

    Hledám kolegu do našeho vývojového týmu.

    Rozšiřujeme náš vývojový tým a hledáme někoho, kdo nám pomůže s vývojem zajímavého projektu, který tvoříme v Golangu. Je založený na microservices a provozujeme ho v AWS.

    Hledáme někoho, kdo má smysl pro detail, nezalekne se psaní testů, API dokumentace, používání Gitflow a pojmů z oblasti DevOps.

    Důležitější je pro nás ale zájem učit se novým věcem a pracovat s novými technologiemi.

    Snažíme se fungovat pomocí agilních metodik a věříme, že nejlepších výsledků lze dosahovat v dobré partě, když nás práce baví a můžeme společně tvořit něco zajímavého.

    Není nutné jezdit do kanceláře. Práci lze vykonávat vzdáleně, ideálně na IČO.
    BLAMI
    BLAMI --- ---
    Btw. pro nedockavce go2go uz neni potreba a Go v master branchi golang/go uz podporuje genericky programovani.
    VELDRANE
    VELDRANE --- ---
    BLAMI: …sem to bral jako prilezitost se aspon trochu s golangem pocvicit :). Nejsem zadnej profi programator a ocekaval sem ze mam nekdy nakou trivialni chybku o ktery nevim.
    BLAMI
    BLAMI --- ---
    VELDRANE: neni to tfuj, naopak v Go svete se tyhle reseni celkem bezne pouzivaj radsi nez NginxConfigGeneratorFactory...
    VELDRANE
    VELDRANE --- ---
    ale asi mi nic jinyho nezbyde
    VELDRANE
    VELDRANE --- ---
    BLAMI: Jako to me taky napadlo ale tfuj tfuj tfuj :)
    BLAMI
    BLAMI --- ---
    VELDRANE: no jako pokud chces, aby se to chovalo nejak pro n-1 pripadu a v tom ntym jinak, tak to udelat jde. Jestlize hledas spis to spravne reseni, tak si naimplementujes template funkci, ktera detekuje posledni prvek v range a v takovym pripade tam ten novy radek neudelas - hint tady: https://stackoverflow.com/a/22375000/497127 ; pokud hledas pragmaticke reseni co funguje, tak ten template vyrenderujes do stringu a na ten pustis strings.TrimSuffix(out, "\n") :)
    VELDRANE
    VELDRANE --- ---
    Ale jo tak ste me ukecali:

    config := help.SetArgs()
    	setLog(config)
    
    	f, err := os.OpenFile(config.OutFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
    
    	if err != nil {
    		log.Errorf("Cannon open output file: %s", config.OutFile)
    	}
    	defer f.Close()
        .
        .
        .
        t := setTemplate(config)
    
        err = t.Execute(f, endpoints)
        if err != nil {
            log.Fatalf("Error during template occurred: %s", err)
        }

    a setTemplate vypada nejak takhle:

    .
    .
    		log.Infof ("Using template file %s", config.Template)
    		t, err := template.ParseFiles(config.Template)
    
    		if err != nil {
    			log.Fatalf("Unable to parse template %s ", config.Template)
    		}
    
    		return t
    .
    .

    Cely je to o tom ze se stahne swagger definice a udela se config podle pouzity technologie (nginx, krakend whatsever). Pouzivali jsme to na poc api gateway, kde bylo nutny rychle generovat config mapy. Myslenka je takova ze vezmou vsechny endpointy ktery to najde ze swaggeru, prida se nakej kontext a udela se z toho novy pole (var endpoints) a to se podle go templaty vyrenderuje do nakyho konfiguraku. Jako vsechno funguje cajk, templata je vetsinou nakej range. To pridani radku je blby v tom ze buhvi proc z nakyho duvodu to openshift/kubernetes nema rad a kdyz v configmape najde white line nebo nakej divnej tak se pak cela tak configmapa uplne rozsype. Je funkcni ale strasne se v ni cte o ad-hoc upravach ani nemluvim. Neni to zadnej showstoper je me to spis trochu sere.
    VELDRANE
    VELDRANE --- ---
    BLAMI: Dikec. Jako to se zbavis, jenze pak mas konec tech zavorek na zacatku te 'location' cesty a to ja nechci :). Cywe kdyz to tak ctu pripomina mi to reseni nekterejch issues s moji drahou polovickou :)). Kod radsi posilat moc nechci, to byste me ugrilovali namiste :).
    BLAMI
    BLAMI --- ---
    VELDRANE: mozna kdybys poslal i kus kodu jak s tim template pracujes. Pokud jde o ten enter za `}` uplne na konci tak toho se zbavis pomoci `{{- end -}}` ( https://play.golang.org/p/2m02dueLj0n )
    VELDRANE
    VELDRANE --- ---
    cus, neumel by mi nekdo poradit s golang templatama. Potrebuju se zbavit posledniho prazdnyho radku a uz mi dochazej napady. Mam neco jako:

    {{ range . -}}
    location {{- if .IsRegex}} ~ {{- else}} = {{- end }} {{ .Prefix}}{{.Path}} {
            set $upstream {{.Upstream}};
            set $locid {{.Id}};
    
            add_header X-Location-Id "$locid";
            proxy_read_timeout 45s;
            {{if .Prefix}}proxy_set_header X-Forwarded-Prefix {{.Prefix}};{{end}}
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
    
            limit_except{{range .Limits}} {{.}}{{end}} {
              deny all;
            }
    
            {{- if .Prefix}}
            if ($request_uri ~* "{{.Prefix}}/(.*))" {
               proxy_pass http://$upstream/$1;
            }
            {{- else}}
            proxy_pass http://$upstream/$request_uri;
            {{- end}}
    }
    {{ end -}}
    kdy se mi spravne vygeneruje kus nginx confu, jen uplne na konci se buhvi proc odradkuje, coz je pikacu paac kdyz to pak nahraju do k8s nebo ocp jako konfigmapu tak se cela rozsrackuje a udela se z toho neprehlednej sranec. Potrebuju jen ten posledni radek zrusit.
    Kliknutím sem můžete změnit nastavení reklam