abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 00:33 | Zajímavý projekt

Společnost MNT Research má v plánu na Crowd Supply spustit kampaň na podporu open source notebooku MNT Reform. Vývoj notebooku lze sledovat na Mastodonu.

Ladislav Hagara | Komentářů: 0
dnes 00:11 | Zajímavý software

Chcete si zahrát víceuživatelský tetris v terminálu? Stačí spustit ssh netris.rocketnine.space. Na straně serveru běží netris. Zdrojové kódy v programovacím jazyce Go jsou k dispozici pod licencí GPLv3.

Ladislav Hagara | Komentářů: 0
včera 19:44 | Nová verze

Po čtyřech měsících vývoje od vydání verze 4.10 byla vydána nová verze 4.11 svobodné náhrady proprietárních BIOSů a UEFI coreboot (Wikipedie). Na vývoji se podílelo 130 vývojářů. Provedli 1630 změn. Přidána byla podpora pro 25 mainboardů.

Ladislav Hagara | Komentářů: 0
včera 16:22 | Nová verze

Byla vydána verze 1.6.0 emulátoru terminálu Terminology (GitHub) postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 14:22 | Komunita

Vydání verze 1.0 svobodného multiplatformního vektorového grafického editoru Inkscape se blíží. Registrovaní uživatelé mají možnost hlasovat o obrázku, který bude zobrazován v okně O Inkscapu. Vybírá se ze 124 návrhů.

Ladislav Hagara | Komentářů: 4
včera 10:55 | Nová verze

Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. V první desítce se nic nezměnilo. Nejvýkonnějším superpočítačem zůstává superpočítač Summit. Nejvíce superpočítačů v TOP500 má Čína (228). Český superpočítač Salomon klesl na 375. místo. Další přehledy a statistiky na stránkách projektu. V aktuálním žebříčku GREEN500 (GFlops/watts) superpočítač Summit klesl na 5. místo.

Ladislav Hagara | Komentářů: 3
včera 02:00 | Zajímavý článek

V novém příspěvku na blogu Purismu se můžete dočíst, jak pokračoval vývoj softwaru Librem 5 v říjnu. Vývojáři optimalizovali linuxové jádro a ovladače pro snížení spotřeby telefonu. Mezi další změny patří lepší integrace mezi aplikacemi pomocí knihovny libfolks, byly přidány nové funkce klávesnice, nastavení, shellu, kompozitoru a opraveno plno chyb.

okias | Komentářů: 3
včera 01:55 | Nová verze

Na Humble Bundle byla spuštěna akce Humble Book Bundle: Cybersecurity 2019 by Packt. Všech 22 videokurzů a elektronických knih věnovaných kybernetické bezpečnosti od nakladatelství Packt lze koupit za 15 dolarů. Peníze lze libovolně rozdělit mezi nakladatelství Packt, neziskovou organizaci Arthritis Foundation a Humble Bundle.

Ladislav Hagara | Komentářů: 0
18.11. 23:22 | Zajímavý článek

Ben Cox v článku Jak psát ovladače nepodporovaných USB zařízení pro uživatelský prostor ukazuje, jak reverzním inženýrstvím dospěl k vlastnímu ovladači userspace-vga2usb pro převodník a frame grabber Epiphan VGA2USB LR s již nepodporovaným linuxovým ovladačem od výrobce.

Fluttershy, yay! | Komentářů: 0
18.11. 22:44 | Zajímavý software

Multiplatformní nástroj Sourcetrail pro analýzu zdrojových kódů a jejich vizualizaci byl uvolněn jako open source. Představení nástroje na YouTube. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GNU GPL 3.0. Další vývoj lze podpořit na Patreonu.

Ladislav Hagara | Komentářů: 0
Jaké hodinky nosíte (nejčastěji)?
 (24%)
 (5%)
 (16%)
 (55%)
Celkem 258 hlasů
 Komentářů: 24, poslední včera 20:25
Rozcestník

Jednoduchá CRUD aplikace (Go a MySQL)

24.10. 22:41 | Přečteno: 1353× | Programování

Pro použítí MySQL s Go je nutné importovat tyto dva balíčky:
import (	
    "database/sql"	
    _ "github.com/go-sql-driver/mysql"	
...
Balíček sql je univerzální interface pro databáze. Balíček mysql je přejmenován na podtržítko (tzv. blank import), aby překladač nehlásil chybu nepoužitého balíčku.

Přístup k databázi má na starosti globální proměnná Db, otevření databáze proběhne ještě před spuštěním funkce main:
var Db *sql.DB

func init() {    
    var err error
    Db, err = sql.Open("mysql", "bookman:heslo@/library")     
    if  err != nil {         // "root:@/library"
        panic(err)                
    }    
}

func main() {
...
Databáze library má pouze jednu tabulku:
CREATE TABLE books (
    book_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
    title VARCHAR(200) NOT NULL,
    first_name VARCHAR(20) NOT NULL,
    last_name VARCHAR(40) NOT NULL,
    year SMALLINT UNSIGNED NOT NULL,
    PRIMARY KEY (book_id)
);
Routes:
mux.HandleFunc("/", index)
mux.HandleFunc("/book/create", createBook)
mux.HandleFunc("/book/update/", updateBook)
mux.HandleFunc("/book/delete/", deleteBook)
URL končící lomítkem odpovídá adrese ve formátu
/book/update/1
Identifikační číslo (tu jedničku) lze získat takto:
id := r.URL.Path[len("/book/update/"):]
Funkce pro přidání knihy:
func createBook(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {    
        tml.Must(tml.ParseFiles(TmlLayout, TmlBookForm,
            TmlBookFormC)).ExecuteTemplate(w, "layout", nil)
        return
    }          
    book := forms.NewBook() 
    if book.IsValid(r) {
        queries.CreateBook(Db, book)
        http.Redirect(w, r, "/", 302)    
        return
    } 
    tml.Must(tml.ParseFiles(TmlLayout, TmlBookForm,
        TmlBookFormC)).ExecuteTemplate(w, "layout", book)    
}
Pokud je přístup z běžné stránky (metoda GET), zobrazí se formulář. Když je formulář odeslán (metoda POST), proběhne kontrola zadaných údajů, a pokud jsou v pořádku, uloží se do databáze. Pokud nejsou validní, zobrazí se formulář se zadanými údaji a chybovými hláškami.

Metoda IsValid z balíčku forms vypadá takto:
type Book struct {
    Values    map[string]string
    Errors    map[string]bool
}

func (b *Book) IsValid(r *http.Request) bool {
    r.ParseForm()        
    valid := true    
    for k, v := range r.PostForm {
        b.Values[k] = v[0]
        if str.TrimSpace(v[0]) == "" {
            b.Errors[k] = true
            valid = false
        }                
    }    
    if !isYear(b.Values["year"]) {            
        b.Errors["year"] = true
        valid = false
    }
    return valid
}
PostForm je mapa sliců (haš polí), takže hodnoty z formuláře představují první prvky (v[0]). Před získáním hodnot je nutné zavolat metodu ParseForm.

Jazyk Go umožňuje definovat anonymní členy struktury:
type BookFormUpdate struct {
    *forms.Book        // pouze typ, zadne jmeno
    IdURL    string
}

update := BookFormUpdate{
    queries.ReadBookToForm(Db, id),
    id,
}
Funkce ReadBookToForm vrací strukturu typu *forms.Book (příklad výše). Přístup k Values je update.Values["title"] místo běžného update.x.Values["title"]. Tohle zjednodušení umožňuje mít pro formulář pouze jednu html šablonu.

Toto jsou asi nejsložitější části aplikace. Celá aplikace je v prvním komentáři.        

Hodnocení: -

zatím nehodnoceno
        špatnédobré        

Obrázky

Jednoduchá CRUD aplikace (Go a MySQL), obrázek 1 Jednoduchá CRUD aplikace (Go a MySQL), obrázek 2 Jednoduchá CRUD aplikace (Go a MySQL), obrázek 3 Jednoduchá CRUD aplikace (Go a MySQL), obrázek 4 Jednoduchá CRUD aplikace (Go a MySQL), obrázek 5 Jednoduchá CRUD aplikace (Go a MySQL), obrázek 6

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

sad avatar 24.10. 22:43 sad | skóre: 9 | blog: sad
Rozbalit Rozbalit vše Re: Jednoduchá CRUD aplikace (Go a MySQL)
Příloha:
Zde.
sad avatar 24.10. 22:54 sad | skóre: 9 | blog: sad
Rozbalit Rozbalit vše Re: Jednoduchá CRUD aplikace (Go a MySQL)
Po stažení je nutné přejmenovat koncovku zpět na .tar.gz
24.10. 23:11 _
Rozbalit Rozbalit vše Re: Jednoduchá CRUD aplikace (Go a MySQL)
Deset minut práce, a lepší výsledek, než co vypotil, Bystrousaak za dva roky :-D
xkucf03 avatar 25.10. 14:02 xkucf03 | skóre: 48 | blog: xkucf03
Rozbalit Rozbalit vše Java

Přemýšlím, co na to říct… snad jen, že v Javě tohle jde řešit mnohem elegantněji.

Tenhle kód v Go je tak nějak na úrovni Servletů (cca rok 1998).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
sad avatar 25.10. 14:29 sad | skóre: 9 | blog: sad
Rozbalit Rozbalit vše Re: Java
To je možná tím, že jsem nepoužil žádný framework, ani žádné cizí balíčky.
25.10. 15:47 OldFrog {Ondra Nemecek} | skóre: 31 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Java
Co je špatně na servletech?
-- OldFrog
xkucf03 avatar 25.10. 15:53 xkucf03 | skóre: 48 | blog: xkucf03
Rozbalit Rozbalit vše Re: Java

V zásadě nic. Resp. je to trochu nízkoúrovňová technologie, nad kterou většinou dává smysl vybudovat nějakou nadstavbu, i když v jednodušších případech můžou posloužit dobře i v aplikaci (ne jen jako základ nějakého frameworku/knihovny).

Jen mne trochu udivuje, že má někdo potřebu je znovu-vynalézat v roce 2019 a ještě se tvářit, že přináší bůhvíjaký pokrok :-) (čímž tedy nemyslím autora tohoto zápisku, ale obecně různé nositele „pokroku“ a „nových“ přístupů)

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
26.10. 09:50 snajpa | skóre: 20 | blog: snajpuv_blocek | Brno
Rozbalit Rozbalit vše Re: Java
Cim chces rict, ze eventually vsechny ceka reinventnout Java spagety (tm)? </rejp>

Nemyslim si, ze by to byl ten pripad, Go vede k uplne jinym spagetam tim, ze se v nem neda delat ruzne meta-vylomeniny, takze je casto jednodussi vykopirovat bloky kodu a pouzit je s trochou uprav jinde, nez to nejak rozumne abstrahovat. Na druhou stranu, kdyz se na Go podivam z pohledu opensource vyvoje powered nejakym Gitem nebo podobne, Go diffy davaji dost smysl a daji se cist rovnou bez hlubokeho stacku v pameti reviewera.
--- vpsFree.cz --- Virtuální servery svobodně
xkucf03 avatar 26.10. 11:48 xkucf03 | skóre: 48 | blog: xkucf03
Rozbalit Rozbalit vše Java, Go, C++
Cim chces rict, ze eventually vsechny ceka reinventnout Java spagety (tm)?

Co jsou „Java špagety“? Nějaký příklad?

Nemyslim si, ze by to byl ten pripad, Go vede k uplne jinym spagetam tim, ze se v nem neda delat ruzne meta-vylomeniny

Go je hodně jednoduchý jazyk, má omezené jazykové možnosti, takže se pak ta složitost musí objevit v tvém vlastním kódu. Opačný extrém je třeba C++ nebo Perl, kde velkou část složitosti můžeš přenést na ten jazyk (jeho syntaxi, standardní knihovnu) a svůj kód mít jednodušší. A Java je někde mezi tím – nabízí víc možností než Go, ale není tak složitá jako C++.

Z velké míry je to otázka osobních preferencí – jak složitý jazyk člověk chce/dokáže udržet v hlavě a efektivně používat a co raději udělá hrubou silou ve vlastnoručně psaném kódu. U jazyka s bohatšími možnostmi je riziko, že člověk neudrží svoji kreativitu na uzdě a začne je nadužívat. U chudšího jazyka zase hrozí, že budeš v každém svém programu znovu-vynalézat kolo nebo pracovat méně efektivně, než by ti tvoje mozková kapacita umožňovala.

takze je casto jednodussi vykopirovat bloky kodu a pouzit je s trochou uprav jinde

V Javě se tomu říká POJO (Plain Old Java Object) tzn. třída, která nezávisí na ničem jiném než standardní knihovně. Takový kód můžeš snadno přenést jinam, aniž bys tam potřeboval další knihovny a frameworky. A tohle je obecný koncept – můžeš to dělat v libovolném jazyce.

Co jsem viděl u různých „Go evangelizátorů“: když přešli z Javy na Go a pochvalovali si Go, tak se ukázalo, že v tom Go začali psát výrazně jiným (jednodušším) stylem než v Javě. To ovšem o daných jazycích neříká vůbec nic – nikdo jim totiž nebránil v té Javě psát tím jednodušším způsobem. Takže tohle je spíš otázka stylu než jazyka.

Zrovna nedávno se někdo hrozně divil, když jsem mu dával nějaký příklad v Javě, který byl jen jeden soubor a stačilo ho přeložit příkazem javac a spustit příkazem java (což zadáš buď ručně nebo si na to uděláš Makefile o pěti řádcích). A dotyčný se ptal, kde je Ant, Maven, frameworky, další knihovny a celkově složitost, kterou od Javy čekal. Tohle je prostě blud, ve kterém spousta lidí žije. Jakým stylem budeš programovat, záleží primárně na tobě, ne na tom jazyku.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
7.11. 18:38 ramosi
Rozbalit Rozbalit vše Re: Jednoduchá CRUD aplikace (Go a MySQL)
I am currently working on crud application which stores data in mysql database and but my whole application is on node js. Below is the code that i am using to connect mysql.

var mysql = require('mysql');

var con = mysql.createConnection({ host: "localhost", user: "yourusername", password: "yourpassword" });

con.connect(function(err) { if (err) throw err; console.log("Connected!"); });

But now i want to try Go language and do the integration with payslipview . You have given really nice explanation here. I will try and let you know on this page , how it works.

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.