cs.wikipedia.org

Go (programovací jazyk) – Wikipedie

  • ️Sat Jan 16 2010

Z Wikipedie, otevřené encyklopedie

Go
Go

Go

Paradigmaimperativní, strukturovaný, objektově orientovaný
Vznik10. listopadu 2009
AutorRobert Griesemer
Rob Pike
Ken Thompson
VývojářGoogle Inc.
Poslední verze1.24.1 (4. března 2025)
Hlavní implementacegc, gccgo
Ovlivněn jazykyC, occam, Modula, Newsqueak, Oberon, Pascal, Python, Limbo[1]
OSLinux, macOS, Microsoft Windows, FreeBSD, Plan 9 from Bell Labs[2]
LicenceBSD
Webgolang.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.

ikona

Tento článek potřebuje aktualizaci, neboť obsahuje zastaralé informace.

Můžete Wikipedii pomoci tím, že ho vylepšíte, aby odrážel aktuální stav a nedávné události. Historické informace nemažte, raději je převeďte do minulého času a případně přesuňte do části článku věnované dějinám.


Komentář: Už jsou třeba dědění a generiky.

Go nepochybně 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 := 0 místo int x = 0;).
    • Rychlá kompilace.
    • Balíčkovací manažer a online dokumentace.
  • 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]

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:

  • 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á funkce append.
  • 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).

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, golint slouží 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 map funkce 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.

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ů,
  • gocodenaš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, 世界")
}
  1. Language Design FAQ [online]. 2010-01-16 [cit. 2010-01-18]. (Golang.org). Dostupné v archivu pořízeném dne 2010-08-18.
  2. Go Porting Efforts [online]. cat-v, 2010-01-12 [cit. 2010-01-18]. (Go Language Resources). Dostupné online.
  3. 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.
  4. Rob Pike, The Changelog Archivováno 20. 10. 2013 na Wayback Machine. podcast (anglicky)
  5. Type Parameters Proposal. go.googlesource.com [online]. [cit. 2025-03-05]. Dostupné online.