Go (programovací jazyk)
Go | |
| Paradigma | imperativní, strukturovaný, objektově orientovaný |
|---|---|
| Vznik | 10. listopadu 2009 |
| Autor | Robert Griesemer Rob Pike Ken Thompson |
| Vývojář | Google Inc. |
| Poslední verze | 1.25.3 (13. října 2025) |
| Hlavní implementace | gc, gccgo |
| Ovlivněn jazyky | C, occam, Modula, Newsqueak, Oberon, Pascal, Python, Limbo[1] |
| OS | Linux, macOS, Microsoft Windows, FreeBSD, Plan 9 from Bell Labs[2] |
| Licence | BSD |
| Web | golang.org |
Go je kompilovaný multiparadigmatický programovací jazyk vytvořený v Google Inc.[3] v roce 2007. Jeho původní autoři jsou Robert Griesemer, Rob Pike a Ken Thompson. Jedná se o staticky typovaný jazyk se syntaxí odvozenou z jazyka C. Jazyk zaručuje typovou bezpečnost, ale obsahuje určité vlastnosti typické pro dynamicky typované jazyky. Jazyk byl představen v listopadu roku 2009.
Design jazyka
[editovat | editovat zdroj]Go patří do rodiny jazyků odvozených od C, ale přináší mnoho změn za účelem konzistence, jednoduchosti a bezpečnosti.
- Vlastnosti typické spíše pro dynamicky typované jazyky:
- Stručná deklarace a inicializace proměnných pomocí odvození typu (
x := 0místoint x = 0;). - Rychlá kompilace.
- Balíčkovací manažer a online dokumentace.
- Stručná deklarace a inicializace proměnných pomocí odvození typu (
- Odlišné přístupy k různým problémům:
- Souběžnost procesů přímo na úrovni jazyka.
- Rozhraní jsou implementována implicitně.
- Použití tzv. embedding místo dědičnosti.
- Produkce staticky linkovaných programů bez dalších závislostí.
- Snaha udržet specifikaci jazyka jednoduchou i za cenu vynechání vlastností běžných u jiných jazyků:[4]
- žádná dědičnost
- žádné přetěžování metod nebo operátorů
- žádné kruhové závislosti mezi balíčky
- žádná aritmetika ukazatelů
- absence generického programování
- bez implicitního přetypování
Syntaxe
[editovat | editovat zdroj]Syntaxe jazyka obsahuje změny oproti C pro zajištění čitelnosti kódu. Programátor nemusí specifikovat typ výrazu, což umožňuje nahradit int i = 3; respektive char* s = "řetězec"; konstrukcemi i := 3 respektive s := "řetězec". Nejsou vyžadovány středníky na konci řádků. Funkce mohou vracet libovolný počet hodnot. Návratový pár result, err je typický způsob předávání chyb volajícímu.
Datové typy
[editovat | editovat zdroj]Kvůli bezpečnosti jsou oproti C přidány následující typy:
- Slice (např.
[]byte) je ukazatel na pole. Uchovává ukazatel na začátek pole, velikost a kapacitu, která určuje, kdy musí být alokována nová paměť při zvětšování velikosti pole. Pro rozšiřování pole slouží zabudovaná funkceappend. - Pro zápis řetězců slouží typ
string, který je reprezentován jako[]byte, ale jeho obsah je neměnný. - Existuje také vestavěná hashovací tabulka (např.
map[string]int). - Kvůli podpoře souběžnosti na úrovni jazyka existuje typ channel (např.
chan int).
Konvence a code style
[editovat | editovat zdroj]Autoři i komunita kladou velký důraz na sjednocení stylu a designu Go programů:
- Odsazování, zarovnávání a jiné konvence pro styl kódu jsou automaticky standardizovány pomocí nástroje
go fmt,golintslouží pro dodatečné kontroly stylu. - Nástroje a knihovny distribuované spolu s Go pobízejí k využívání standardizovaných nástrojů pro API dokumentaci (
godoc), testování (go test), kompilaci (go build), balíčkovací systém (go get), aj. - Syntaktická pravidla vyžadují věci, které jsou v jiných jazycích volitelné (např. absence kruhových závislostí, zákaz nevyužitých proměnných nebo importovaných knihoven nebo žádné implicitní přetypování).
- Vynechání některých vlastností (zkratky známé z funkcionálního programování jako
mapfunkce nebo výjimky (try/catch) nabádá k využití explicitního imperativního programovacího stylu. - Hlavní autoři často píší a přednáší o stylu, správném návrhu a filozofii Go.
Přidružené nástroje
[editovat | editovat zdroj]Distribuce Go obsahuje např.:
go build– kompilace a vytváření binárních souborů, pro kompilace stačí pouze informace ve zdrojových souborech (žádný Makefile),go test– unit testování a benchmark,go fmt– formátování kódu,go vet– statická analýza, hledání potenciálních chyb v kódu,go run– zkratka pro kompilaci a spuštění,godoc– dokumentace,go generate– generování kódu.
Mimo tyto nástroje existují ještě další, které sice nejsou součástí oficiální distribuce, ale jsou také hojně využívány:
gorename– bezpečné přejmenování identifikátorů,gocode– našeptávání, které lze napojit do různých textových editorů,goimports– automatické přidávání/odebírání importovaných knihoven podle potřeby.
Typový systém
[editovat | editovat zdroj]Go implementuje polymorfismus pomocí rozhraní.
Proměnné typu rozhraní obsahují ukazatel na instanci na haldě
a druhý na informaci o typu instance.
Nejobecnější rozhraní interface{} neobsahuje žádné metody.
Go 2 obsahuje generické typy a metody.[5]
Typový systém Go 2 je podobný typovému systému Rustu, zejména traitům.
Hello World
[editovat | editovat zdroj]Oficiální Hello World, který demonstruje, že jazyk používá pro práci s textovými řetězci kódování UTF-8.
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
Reference
[editovat | editovat zdroj]- ↑ Language Design FAQ [online]. 2010-01-16 [cit. 2010-01-18]. (Golang.org). Dostupné v archivu pořízeném dne 2010-08-18.
- ↑ Go Porting Efforts [online]. cat-v, 2010-01-12 [cit. 2010-01-18]. (Go Language Resources). Dostupné online.
- ↑ KINCAID, Jason. Google’s Go: A New Programming Language That’s Python Meets C++ [online]. TechCrunch, 2009-11-10 [cit. 2010-01-18]. Dostupné online.
- ↑ Rob Pike, The Changelog Archivováno 20. 10. 2013 na Wayback Machine. podcast (anglicky)
- ↑ Type Parameters Proposal. go.googlesource.com [online]. [cit. 2025-03-05]. Dostupné online.
Externí odkazy
[editovat | editovat zdroj]
Obrázky, zvuky či videa k tématu Go na Wikimedia Commons - Domovská stránka jazyka
- Seriál o programovacím jazyku Go na serveru Root
- Článek o Go na Rootu
- Go programovanie a komunita na Slovensku
- Blog o Go ve slovenštině