![]() Go | |
Paradigma | imperativní, strukturovaný, objektově orientovaný |
---|---|
Vznik | 10. listopadu 2009 |
Autor | Robert Griesemer Rob Pike Ken Thompson |
Vývojář | Google Inc. |
Poslední verze | 1.24.3 (6. května 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.
Go nepochybně patří do rodiny jazyků odvozených od C, ale přináší mnoho změn za účelem konzistence, jednoduchosti a bezpečnosti.
x := 0
místo int x = 0;
).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.
Kvůli bezpečnosti jsou oproti C přidány následující typy:
[]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á funkce append
.string
, který je reprezentován jako []byte
, ale jeho obsah je neměnný.map[string]int
).chan int
).Autoři i komunita kladou velký důraz na sjednocení stylu a designu Go programů:
go fmt
, golint
slouží pro dodatečné kontroly stylu.godoc
), testování (go test
), kompilaci (go build
), balíčkovací systém (go get
), aj.map
funkce nebo výjimky (try/catch
) nabádá k využití explicitního imperativního programovacího stylu.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.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.
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, 世界")
}