Go (programovací jazyk)

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Go je kompilovaný multiparadigmatický programovací jazyk vytvořený v Google Inc. 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

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. +more ** 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ů: ** žá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

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". +more 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

Kvůli bezpečnosti jsou oproti C přidány následující typy:

* Slice (např. []byte) je ukazatel na pole. +more 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).

Konvence a code style

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. +more * 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.

Přidružené nástroje

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

Go implementuje polymorfismus pomocí rozhraní. Proměnné typu rozhraní obsahují ukazatel na instanci na haldě a druhý na informaci o typu instance. +more Nejobecnější rozhraní interface{} neobsahuje žádné metody.

Go 2 obsahuje generické typy. Generické mohou být struktury i rozhraní, například:

type I[T any] interface { type *T }

type S[T any, PT I[T]] struct {}

Typový systém Go 2 je podobný typovému systému Rustu, zejména traitům.

Hello World

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

Externí odkazy

[url=http://golang. org/]Domovská stránka jazyka[/url] * [url=https://www. +moreroot. cz/serialy/programovaci-jazyk-go/]Seriál o programovacím jazyku Go na serveru Root[/url] * [url=http://www. root. cz/clanky/rychle-rychleji-az-uplne-nejrychleji-s-jazykem-go/]Článek o Go na Rootu[/url] * [url=https://golang. sk/]Go programovanie a komunita na Slovensku[/url] * [url=http://golangsk. logdown. com/]Blog o Go ve slovenštině[/url].

Kategorie:Programovací jazyky Kategorie:Multiparadigmatické jazyky Kategorie:Software pod licencí BSD

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top