programovanie

Generics – generické programovanie

Thursday, Mar 10, 2022 | by Lenka | navody programovanie generics

Generické programovanie, tiež známe ako parametrický polymorfizmus v iných programovacích jazykoch, je spôsob ako oddeliť algoritmus od konkrétneho typu. Abstrahovaním typu umožňuje bežným zápisom funkcií podporovať viaceré, aj vopred neznáme typy argumentov funkcií a tým znižovať počet duplikácií funkcií. Ako vlastnosť programovacieho jazyka Go neboli generické prvky obsiahnuté v prvej verzii (Go1.x) ani v dizajne jazyka. Autori odmietali kvôli komplikovanosti a spomaleniu kompilácie C++ “template metaprogramming” riešenie aj “type erasure” riešenie Javy kvôli problémom so zabúdaním typov a pretypovávaním.

Pokračovať v čítaní

Reflexia v Go - reflection

Tuesday, Feb 1, 2022 | by Lenka | navody programovanie reflection reflect interface ValueOf TypeOf Kind

Reflexia je schopnosť programu skúmať a analyzovať svoju štruktúru za behu programu. Väčšinou s premennými, typmi a funkciami v Go pracujeme priamo. Keď potrebujeme typ, jednoducho ho definujeme: type Foo struct { A int B string } Keď potrebujeme premennú, jednoducho ju definujeme: var f Foo A keď potrebujeme pracovať s funkciou, jednoducho ju definujeme: func Do(f Foo) { fmt.Println(f.A, f.B) } Ale niekedy sa stane, že chceme pracovať s premennými za behu programu pomocou informácií, ktoré neexistovali, keď bol program písaný a kompilovaný.

Pokračovať v čítaní

Go metódy: priradenie funkcií typom

Monday, May 17, 2021 | by Lenka | navody programovanie methods receivers oop

Objektovo orientované programovanie v Go Striktne vzaté, Go nie je čistý objektovo orientovaný programovací jazyk, pretože nemá triedy a hierarchickú dedičnosť. Go však má zložené typy ako štruktúry, polymorfizmus prostredníctvom rozhraní, má prepracovanejšiu kompozíciu ako bežné objektovo orientované jazyky, zapuzdrenie na úrovni balíkov a podporuje definovanie metód na typoch. Tieto vlastnosti umožňujú Go objektovo orientovaný štýl programovania. Metódy Metóda je funkcia so špeciálnym argumentom prijímača správy - receivera. Pomocou prijímača môže metóda získať prístup k jeho vlastnostiam.

Pokračovať v čítaní

Go modules: Správa závislostí

Thursday, Mar 4, 2021 | by Lenka | navody programovanie moduly modules versioning go get go mod

Ako sa starať o závislosti (Dependency management) Keď kód používa externé balíky - balíky tretích strán, tieto balíky (distribuované ako moduly) sa stávajú závislosťami. Aby bol kód stále aktuálny, treba sa starať aj o tieto závislosti. Go poskytuje nástroje na správu závislostí, ktoré pomáhajú zaistiť bezpečnosť aplikácií pri začleňovaní externých závislostí. Závislosti, ako moduly, obsahujú importované balíky. Vývojari po celom svete robia svoje moduly dostupné a zdieľajú ich pre ostatných vývojarov.

Pokračovať v čítaní

Konštanty a vlastné typy v Go

Sunday, Nov 1, 2020 | by Lenka | navody programovanie const enum type

V Go je veľmi jednoduché vytvoriť si vlastný typ (custom type), vytvoriť konštantu vlastného typu alebo enumerátor (enum). Konštanta (Constant) Ako už názov KONŠTANTA (constant) označuje niečo fixné - pevné/stálé, aj v programovacích jazykoch je to rovnaké. Keď je raz hodnota konštanty definovaná, už viac nemôže byť zmenená. V Go to platí rovnako. Konštanta v Go môže byť akýkoľvek z jednoduchých a zložených typov - celočíselná konštanta (integer), konštanta s plávajúcou desatinnou čiarkou (float, complex), znak (character), reťazec (string), pravdivostná konštanta (boolean).

Pokračovať v čítaní

Rozhranie v Go: Interface

Sunday, Nov 15, 2020 | by Lenka | navody programovanie interface

To, že je Go skvelý a výnimočný jazyk sme si už veľakrát dokázali. Poďme sa bližšie pozrieť na rozhranie (interface). Úvod Rozhrania v Go boli navrhnuté podľa protokolov z programovacieho jazyka Smalltalk. Ide o špecifikáciu jednej alebo viacerých metód ich názvom, parametrami a návratovými typmi, ktoré sú spoločné pre entity určitou zdieľanou vlastnosťou. Rozhrania však nešpecifikujú telo - správanie metódy. V súvislosti s Go rozhraniami sa môžeme stretnúť s pojmom Duck typing - ak to kráča ako kačka, ak to kváka ako kačka, tak to musí byť kačka!

Pokračovať v čítaní

Go Cheat Sheet

Saturday, Nov 7, 2020 | by Nelo | programovanie cheat-sheet

Na uľahčenie programovania v Go je tu malý ťahák v PDF formáte alebo v PNG formáte. Všetky príklady a o čosi viac nájdete aj nižšie na tejto stránke. Obsah: Inštalácia, štruktúra programu, kompilácia a spustenie Premenné a konštanty, typy, ukazovatele Polia, výrezy, mapy Cykly a rozpätia Podmienky a prepínače Funkcie, uzavretia a lambdy a odloženie Metódy a rozhrania Súbežnosť a synchronizácia Inštalácia https://golang.org/doc/install $ go version späť na obsah

Pokračovať v čítaní

Fraktálové obrázky v Go

Saturday, Oct 31, 2020 | by Nelo | navody programovanie image webserver complex concurrency

Fraktály sú dobre známe sebe-podobné množiny, ktoré vyzerajú podobne v rôznych úrovniach zväčšenia. Najznámejší fraktál nesie meno po svojom objaviteľovi, polsko-francúzsko-americkom matematikovi - Benoitovi Mandelbrotovi. V roku 1980, keď ako jeden z prvých použil počítačovú grafiku na zobrazovanie fraktálnej geometrie pomocou IBM strojov. V Go vďaka natívnej podpore komplexných čísel a knižníc na prácu s obrázkami vieme jednoducho vytvoriť web server, ktorý interaktívne generuje fraktálové obrazy do png. Vytvoríme si Go server, HTML a jednoduchý JavaScript, pomocou ktorého budeme hľadať zaujímavé štruktúry:

Pokračovať v čítaní

Štruktúry a rozhrania v Go

Sunday, Oct 25, 2020 | by Nelo | navody programovanie struct interface function pointer

Často potrebujeme zoskupiť dáta do typov, s ktorými sa ľahšie pracuje. V objektovo orientovaných programovacích jazykoch sa to rieši pomocou tried, ktoré zapuzdrujú dáta a metódy, ktoré nad nimi pracujú. Go ponúka objektovo orientovaný prístup, metódy a rozhrania, ale nepodporuje hierarchiu tried, podtriedy a dedenie. Vychádza z OOP princípu “composition over inheritance” a podporuje polymorfizmus prostredníctvom rozhraní, čím výrazne zjednodušuje štruktúru programov, zvyšuje flexibilitu a prepoužiteľnosť kódu. Štruktúry: struct Štruktúry sú hodnotové agregované typy.

Pokračovať v čítaní

Súbežné programovanie v Go

Sunday, Oct 18, 2020 | by Nelo | navody programovanie concurrency channels

Veľká výhoda Go je, že bolo od začiatku navrhované na jednoduché súbežné programovanie. Súbežnosť nie je paralelizmus, ale je nutným predpokladom k paralelizmu, druhým je bežať program na viacjadrových procesoroch. Gorutiny sú základom súbežného programovania v Go. Od systémových threadov sa líšia tým, že ich inicializačný zásobník malý (typicky 4KB namiesto 1MB) a môže dynamicky rásť a zmenšovať sa. Gorutiny majú taktiež menšiu réžiu ako thready a sú obyčajne multiplexované na menší počet systémových threadov, teda nie 1:1.

Pokračovať v čítaní

Spracovanie chýb a testovanie v Go

Tuesday, Oct 13, 2020 | by Nelo | navody programovanie chyby testovanie

Defekty patria neodmysliteľne k písaniu kódu. V knihe Code Complete Steve McConnell uvádza priemyselný štandard 15-50 defektov na 1000 riadkov kódu (KLOC) v teste a 5 defektov na KLOC v produkcii s nákladmi na testovanie $5 na riadok kódu. Microsoft aplikáciach vstupuje do testov 10-20 defektov na KLOC a do produkcie 0,5 defektov na KLOC. Defekty môžu mať za následok stratu života alebo veľké finančné straty. Koľko defektov je príliš veľa?

Pokračovať v čítaní

Dátové kolekcie v Go - polia, výrezy, mapy

Wednesday, Sep 30, 2020 | by Nelo | navody programovanie arrays slices maps

Dátové kolekcie patria medzi základné typy v každom modernom jazyku. Umožňujú ukladať prvky rovnakého typu a následne k nim pristupovať pomocou indexu alebo kľúča. Go pozná tri základné typy dátových kolekcií: Pole: array[N]T, Výrez: slice[]T, Mapa: map[K]T. Kde T je akýkoľvek typ, K je typ, ktorý implementuje rovnosť (napríklad string) a N je kladné celé číslo. Pole - Array Pole, rovnako ako v iných programovacích jazykoch je súbor rovnakých dátových typov s fixnou veľkosťou.

Pokračovať v čítaní

Go HTTP web server návod časť 3 - statické stránky so šablónami

Sunday, Sep 13, 2020 | by Nelo | navody programovanie webserver

Dnes si vytvoríme jednoduchý webserver statických stránok so šablónami Go webserver so šablónami Go obsahuje balíček html/template, ktorý implementuje prácu so šablonami pre generovanie HTML na základe šablony a dynamických dát. Šablony sú zabezpečené proti vložení a spustení kódu, predpokladajú, že tvorca šablon je dôveryhodný, ale ale kto ju spúšťa s dátami tak nie, preto použité dynamické dáta budú sanitizované a escapované špecifické znaky pre HTML, CSS, JavaScript a URI.

Pokračovať v čítaní

Go HTTP web server návod časť 2 - dynamický rounting

Sunday, Sep 6, 2020 | by Nelo | navody programovanie webserver

Go ponúka jednoduchý router, ale čo ak nám nestačí statický routing a potrebujeme smerovať požiadavky napríklad podľa čísla zákazníka, článku alebo dátumu? Štandardný routing môžeme jednoducho rozšíriť o regulárne výrazy a ďalej napríklad kvôli bezpečnosti kontrolovať HTTP metódu. Na väčšinu aplikácií postačí základná funkcionalita a nie su nutné frameworky, ak však hľadáte sofistikované routing balíčky odporúčam pozrieť Gorilla/Mux alebo Go-Chi. Dynamický router v Go Dnes si vytvoríme jednoduchý dynamický router s rule enginom, ktorý traverzuje stromom pravidiel a hľadá zhodu pomocou regulárnych výrazov.

Pokračovať v čítaní

Go HTTP web server návod časť 1

Monday, Aug 31, 2020 | by Nelo | navody programovanie webserver

Keď potrebujeme aby dve alebo viac aplikácií medzi sebou komunikovali, rozhodujeme sa akú API architektúru použijeme. Synchrónnu (request-response) alebo asynchrónnu (message/event-driven/streaming) s akým protokolom. Synchrónna sa najčastejšie používa pri klient-server architektúrach ak sa častejšie dopytujeme a požadujeme výsledok. Asynchrónna sa používa ak k nám častejšie informácie prichádzajú (počúvanie na udalosti, streamovanie hudby), alebo ich spracovanie trvá príliš dlho, alebo máme viacerých producentov alebo konzumerov správ. REST (Representational State Transfer) definovaný v roku 2000 dodnes patrí medzi najpoužívanejšiu formu synchrónnej komunikácie a API.

Pokračovať v čítaní

Generické programovanie v Go

Saturday, Aug 1, 2020 | by Nelo | programovanie generics inspiration

Generické programovanie je štýl písania algoritmov alebo typov, v ktorom nie sú typy definované priamo, ale budú určené neskôr (pri kompilácii - C++/Rust alebo za behu programu - Python/TypeScript) v časti kódu volajúceho generický algoritmus. To umožňuje výrazne zvýšiť znovupoužiteľnosť kódu a redukovať duplicity a tým aj chyby. Typický use case sú napríklad generické algoritmy Map, Reduce, Filter, alebo generický typ (container) Node v binárnom strome. V novej verzii Go sa uvažuje pridať formu parametrického polymorfizmu.

Pokračovať v čítaní

TAK ČO HOVORÍŠ ?

Kontaktuj nás ak potrebuješ pomoc, veľmi radi pomôžeme.

Kontaktuj nás