Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
func main() { x := "hello!" for i := 0; i < len(x); i++ { x := x[i] if x != '!' { x := x + 'A' - 'a' fmt.Printf("%c", x) // "HELLO" (one letter per iteration) } } }V následující části programu má f platnost pouze v bloku if, takže není vidět v dalších příkazech, které následují.
if f, err := os.Open(fname); err != nil { // compile error: unused: f return err } f.ReadByte() // compile error: undefined f f.Close() // compile error: undefined fTudíž je občas nutné deklarovat proměnou před podmínkou:
f, err := os.Open(fname) if err != nil { return err } f.ReadByte() f.Close()Slice je jednoduchá datová struktura, která umožňuje přístup k prvkům pole, kterému se říká underlying array. Slice má tři komponenty: ukazatel, délku a kapacitu. Protože slice obsahuje ukazatel, mohou funkce měnit prvky odkazovaného, spodního pole.
// reverse reverses a slice of ints in place. func reverse(s []int) { for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i], s[j] = s[j], s[i] } }Zde obracíme pole:
a := [...]int{0, 1, 2, 3, 4, 5} reverse(a[:]) fmt.Println(a) // "[5 4 3 2 1 0]"a zde slice:
s := []int{0, 1, 2, 3, 4, 5} // Rotate s left by two positions. reverse(s[:2]) reverse(s[2:]) reverse(s) fmt.Println(s) // "[2 3 4 5 0 1]"V případě, že chceme změnit u slice ukazatel, délku nebo kapacitu, musíme použít přiřazení, aby došlo k aktualizaci hodnot. Proto vestavěná funkce append má tento tvar:
runes = append(runes, r)Zde je kontext:
var runes []rune for _, r := range "Čau, Světe" { runes = append(runes, r) } fmt.Printf("%q\n", runes) // "['Č' 'a' 'u' ',' ' ' 'S' 'v' 'ě' 't' 'e']"Tak to by bylo na úvod vše. Akorát bych poznamenal, že výše uvedené příklady jsou pouze útržky kódu a například bez importování příslušných balíčků ze standardní knihovny nebudou fungovat.
package filecsv import ( "encoding/csv" "io/ioutil" "strings" ) type Table [][]string func GetLines(file string) (Table, error) { bytes, err := ioutil.ReadFile(file) if err != nil { return nil, err } str := string(bytes) r := csv.NewReader(strings.NewReader(str)) var t Table if t, err = r.ReadAll(); err != nil { return nil, err } return t, nil } func (t Table) AlterColor(n int, s1, s2 string) string { if n % 2 == 0 { return s1 } return s2 }Zde máme vlastní balíček filecsv, který obsahuje jednu funkci a jednu metodu. Funkce GetLines načítá ze souboru bajty, které jsou poté převedeny funkcí string na řetězec, a metoda ReadAll vrací slice sliců, který obsahuje csv data v podobě dvourozměrného pole.
package main import ( "fmt" "log" "net/http" "projectx/filecsv" "time" tmp "html/template" ) type Page struct { Rows filecsv.Table } const ( tempLayout = "templates/layout.html" tempHello = "templates/hello.html" tempFuncs = "templates/funcs.html" tempStats = "templates/stats.html" csvFuncs = "csvdata/funcs" csvStats = "csvdata/stats" ) var Data Page func main() { mux := http.NewServeMux() files := http.FileServer(http.Dir("public")) mux.Handle("/server/", http.StripPrefix("/server/", files)) mux.HandleFunc("/", tutorial) mux.HandleFunc("/functions", functions) mux.HandleFunc("/popularity", popularity) server := &http.Server{ Addr: "127.0.0.1:8080", Handler: mux, ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } server.ListenAndServe() } func tutorial(w http.ResponseWriter, r *http.Request) { Data.Rows = nil t := tmp.Must(tmp.ParseFiles(tempLayout, tempHello)) t.ExecuteTemplate(w, "layout", Data) } func functions(w http.ResponseWriter, r *http.Request) { var err error Data.Rows, err = filecsv.GetLines(csvFuncs) if err != nil { log.Fatal(err) } t := tmp.Must(tmp.ParseFiles(tempLayout, tempFuncs)) t.ExecuteTemplate(w, "layout", Data) } func popularity(w http.ResponseWriter, r *http.Request) { var err error Data.Rows, err = filecsv.GetLines(csvStats) if err != nil { log.Fatal(err) } t := tmp.Must(tmp.ParseFiles(tempLayout, tempStats)) t.ExecuteTemplate(w, "layout", Data) } func (p Page) Date() string { return fmt.Sprintf(time.Now().Format("02 Jan 2006 15:04")) }V balíčku main funkce tutorial, functions a popularity představují tři webové stránky.
make,len,cap,new append,copy,close,delete complex,real,imag,panic recover,,,
1st,2nd,3rd,4th,5th,6th,7th,8th,9th,10th JavaScript,Python,Ruby,PHP,Java,C++,C,Objective-C,C#,Go JavaScript,Python,Ruby,Java,PHP,C++,C,Go,C#,Shell JavaScript,Python,Java,Ruby,PHP,C++,Go,C,C#,Shell JavaScript,Python,Java,PHP,Ruby,Go,C++,C#,C,TypeScript JavaScript,Python,Java,Go,Ruby,C++,PHP,TypeScript,C#,C
{{define "layout"}} <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="/server/css/project.css" /> </head> <body> <div id="wrapper"> <div id="header"> <h1>The Go Programming Language</h1> </div> <div id="nav"> <ul> <li><a href="/">Tutorial</a></li> <li><a href="/functions">Functions</a></li> <li><a href="/popularity">Popularity</a></li> <li>Item4</li> <li>Item5</li> <li>Item6</li> </ul> </div> <div id="outside_div"> <div id="inside_div"> {{template "content" .}} </div> </div> <div id="footer"> <p>{{.Date}}</p> </div> </div> </body> </html> {{end}}
{{define "content"}} <h3>Hello, World</h3> <pre> package main import "fmt" // fmt is a package func main() { fmt.Println("Hello, World!") } </pre> {{end}}
{{define "content"}} <div id="table_stats"> <h3 class="table_space">Built-in Functions</h3> <tt> {{range .Rows}} {{range .}} {{.}} {{end}} <br /> {{end}} </tt> </div> {{end}}Tečka a samotný znak dolaru představují data, která byla předána šabloně. Tečka se však v range mění na prvky pole nebo struktury.
{{define "content"}} <h3>GitHub Language Stats</h3> <table> <tr class="head"><td>Ranking</td><td>2014 Q1</td><td>2015 Q1</td> <td>2016 Q1</td><td>2017 Q1</td><td>2018 Q1</td></tr> {{$r := .Rows}} {{range $i, $v := index .Rows 0}} <tr class="{{$.Rows.AlterColor $i "even" "odd"}}"><td>{{index $r 0 $i}}</td> <td>{{index $r 1 $i}}</td><td>{{index $r 2 $i}}</td><td>{{index $r 3 $i}}</td> <td>{{index $r 4 $i}}</td><td>{{index $r 5 $i}}</td></tr> {{end}} </table> <a class="table_link" href="https://madnight.github.io/githut/#/pull_requests/2018/1">github</a> {{end}}
a, body, br, div, h1, h3, li, link, p, pre, table, td, tr, tt, ul { margin: 0; padding: 0; border: 0; } body { background: #fff; font: 100% sans-serif; } #wrapper { max-width: 1000px; margin: 30px auto; background: #fff; } #header { background: #cce6ff; border-top: 1px solid black; border-bottom: 1px solid black; padding: 20px; } #nav { width: 25%; height: 600px; border-right: 1px solid black; float: left; } #outside_div { width: 74%; height: 600px; float: right; } #footer { border-top: 1px solid black; clear: both; } #header h1 { font-weight: 500; } #nav ul { margin: 40px 60px; } #nav li { margin: 5px; } #inside_div { margin: 40px 30px; } #inside_div h3 { font-weight: 500; margin-bottom: 20px; } table { font-size: .9em; border-collapse: collapse; margin: 10px 0; } th, td { padding: .5em .75em; } td { border: 1px solid black; } tr.head { background: #cce6ff; color: #000; } tr.even { background: #fff; } tr.odd { background: #ededed; } a.table_link { display: inline-block; margin-top: 10px; } pre { background: #ededed; padding: 20px; width: 500px; }
Tiskni
Sdílej:
Absence constness je feature.Ne, není.
Oproti tomu C++xx je hrozne prekombinovany a slozity jazyk, v jednoduchosti je krasa.Ne, že bych nesouhlasil, s tím C++ je to pravda, nicméně tímhle mají lidi okolo Go tendenci zdůvodňovat úplně cokoli...
Ale samozrejme je treba na dany ukol volit ten nejlepsi nastroj (jazyk). U backendu mi prijde Go jako perfect fit.Jo, to celkem souhlasim, minimálně na běžné věci...