Proč byste chtěli používat jazyk Go? V zásadě jde o výstižný, jednoduchý, bezpečný a rychlý kompilovaný jazyk s úžasnými funkcemi souběžnosti a snadno zvládne velké projekty. Je to také bezplatný otevřený zdroj, i když byl původně vyvinut ve společnosti Google.
Podle Roba Pikea, jednoho z návrhářů jazyka, „cílem projektu Go bylo eliminovat pomalost a neobratnost vývoje softwaru ve společnosti Google, a tím zvýšit produktivitu a škálovatelnost procesu. Jazyk byl navržen a pro lidi, kteří píší - a čtou, ladí a udržují - velké softwarové systémy. “
V souladu s těmito cíli postrádá Go mnoho funkcí některých dalších významných jazyků - a to je vlastně síla. Go není objektově orientovaný, nemá záhlaví ani dopředná deklarace, nemá hierarchii typů, nemá přetížení metody ani operátora, nemá generika, nemá a virtuální stroj za běhu, nemá výjimky a nemá tvrzení.
Na druhou stranu to, co má Go, funguje docela dobře. Dokáže sestavit velké programy za pár sekund. Má coroutiny s nízkou režií (tzv goroutiny), které mohou efektivně komunikovat prostřednictvím kanály. Má rozhraní a složení rozhraní. Go navíc podporuje funkce první třídy, funkce vyššího řádu, uživatelem definované typy funkcí, funkční literály, uzávěry a více návratových hodnot - jinými slovy podporuje styl funkčního programování v silně psaném jazyce.
Pokud chcete požádat o některou z chybějících funkcí, které jsem zmínil výše, možná si budete chtít přečíst diskuzi o jazykových změnách v Go language FAQ: Odpověď je obvykle „Ne, protože ...“ navrženy od nuly k používání funkcí jazyka Go, nikoli překládány doslovně z jiných jazyků, které používají různé abstrakce
Nainstalujte Go
Krátké pokyny pro instalaci Go se objeví ve zdrojovém úložišti. Můžete si stáhnout binární vydání Go pro Windows, MacOS a Linux nebo nainstalovat Go ze zdroje. Pokyny k instalaci Go ze zdroje najdete na GitHubu.
Pokud již máte Go nainstalovaný, měli byste zkontrolovat aktuální verzi buildu v dolní části //golang.org/ a poté zkontrolovat nainstalovanou verzi z příkazového řádku:
$ go verze
Pokud je vaše instalace zastaralá, stáhněte a nainstalujte aktuální verzi. Restartujte všechny otevřené příkazové příkazy (Windows) nebo terminály. Opakovat go verze
a ujistěte se, že verze odpovídá očekávané verzi; pokud ne, může být někde nainstalována starší verze Go, kterou je třeba odstranit.
(Ne, nejsem paranoidní. Podařilo se mi dostat se do situace, kterou jsem popsal, pomocí Homebrew k instalaci jedné verze a standardního balíčku MacOS k instalaci další verze asi o měsíc později. Instalují se do různých umístění na $ CESTA
. Jakmile jsem zjistil, co se stalo, mohl jsem odinstalovat starou verzi pomocí Homebrew.)
Další možností instalace, pokud chcete podporu a odškodnění a jste schopni platit, je použití ActiveGo.
Jakmile máte nainstalovaný překladač a nástroje Go, měli byste projít cvičením kompilace a spuštění programu Go, jak je popsáno v části „Otestujte instalaci“ na stránce instalace.
Nastavte prostředí Go
Programátoři Go obvykle uchovávají veškerý svůj kód v jednom pracovním prostoru s zásobník
, bal
, a src
složky. V rámci každé složky mají projekty obvykle cesty, které se vztahují k úložištím Git, jako je GitHub nebo GitLab. Například nechávám celý svůj jazykový kód Go pod ~ / práce
, a nastavit můj GOPATH
proměnná prostředí do $ DOMŮ / práce
. Cesta k mé složce zdrojového kódu „hello.go“ je $ GOPATH / src / github.com / meheller / ahoj
.
Také přidám GOPATH / koš
adresář na mou cestu, pro pohodlí při spouštění programů Go z libovolného adresáře:
export GOPATH = $ HOME / práceexport PATH = $ PATH: $ (go env GOPATH) / bin
Jazykové nástroje Go se nainstalují v GOPATH
ve výchozím nastavení, takže uvedení GOPATH / koš
adresář na cestě také usnadňuje jejich vyhledání editorům a IDE podporujícím Go. Většinu nástrojů můžete nainstalovat pomocí $ jdi dostat
jakmile víte, které z nich potřebujete a jejich cesty úložiště. Úložiště lze obvykle snadno vyhledat pomocí vyhledávání Google. V některých případech nainstaluje pomocný program editor pro Go (např. gocode
) automaticky.
Pokud to nenastavíte sami, GOPATH
výchozí nastavení $ HOME / jít
na Unixu a MacOS a % USERPROFILE% / go
ve Windows.
Přejít na jazykové nástroje, editory a IDE
Několik nástrojů Go je nainstalováno jako součást balíčku s kompilátorem. Ostatní lze nainstalovat pomocí jdi si
příkaz. Níže jsou uvedeny nejpoužívanější nástroje příkazového řádku Go.
název | Synopse |
---|---|
jít | Spravuje zdrojový kód Go a spouští další zde uvedené příkazy. |
cgo | Umožňuje vytváření balíčků Go, které volají kód C. |
Pokrýt | Program pro vytváření a analýzu profilů pokrytí generovaných jít otestovat -profil . |
opravit | Vyhledá programy Go, které používají staré funkce jazyka a knihoven, a přepíše je tak, aby používaly novější. |
fmt | Balíčky formátů Go. K dispozici také jako nezávislý gofmt příkaz s obecnějšími možnostmi. |
bože | Extrahuje a generuje dokumentaci pro balíčky Go. |
veterinář | Prozkoumává zdrojový kód Go a hlásí podezřelé konstrukce, například Printf volání, jejichž argumenty se neshodují s formátovacím řetězcem. |
Obvyklý způsob volání většiny těchto příkazů je jako dílčí příkazy jít
, například jdi fmt
. Ostatní je třeba volat prostřednictvím jít nástroj
dílčí příkaz. Na mé instalaci, jít nástroj
vrací následující seznam známých nástrojů:
$ go nástrojaddr2line
asm
buildid
cgo
kompilovat
Pokrýt
dist
doc
opravit
odkaz
nm
objdump
balíček
pprof
test2json
prohlídka
stopa
veterinář
Tyto nástroje jsou dokumentovány jako součást úplného seznamu příkazů Go. Mimochodem, ujistěte se, že GOPATH
je nastavena před přidáním jakýchkoli nástrojů Go nebo jakýchkoli doplňků editoru Go, které používají nástroje Go.
Repozitář Go postrádal od verze 1.4 podporu jakéhokoli editoru nebo IDE, ale o Go je spousta z nich, ať už z krabice nebo s doplňkovými moduly. O mnoha z nich jsem hovořil v článku z roku 2017; existuje také neoficiální seznam udržovaný komunitou Golang.

Moje oblíbené IDE v jazyce Go jsou GoLand (zobrazeno výše; přejmenováno z Goglandu, protože jsem článek napsal v roce 2017) a Komodo. Oba jsou placené produkty s bezplatnými zkušebními verzemi.
Budete si chtít nainstalovat ladění Delve for Go. V systému MacOS budete možná muset přidat nástroje příkazového řádku do Xcode a případně přidat měkký odkaz debugserver
, jak je popsáno v komentáři z 5. června v seznamu problémů s Delve. Běh xcode-select - install
také opraví problémy s hledáním debugserver
, i když hrubou silou.
Moje oblíbené Go-aware editory s GUI jsou Atom a Visual Studio Code; oba jsou zdarma. Pokud zvolíte Atom, zvažte přidání balíčků go-plus a go-debug; pokud zvolíte Visual Studio Code, zvažte přidání vscode-go.
Pokud jste tvrdým uživatelem Vim nebo Emacs, pak v každém případě zůstaňte na tom, co víte - ne že bych mohl dokonce vytrhnout vašeho editora z vašich chladných, mrtvých rukou. Vim-go přidává podporu jazyka Go pro Vim a go-mode přidává podporu jazyka Go pro Emacs.
Prohlídka cesty
Můžete se toho trochu naučit tím, že projdete „Prohlídku cesty“, ať už online nebo offline. Za předpokladu, že jste dokončili místní instalaci kompilátoru a nástrojů Go, můžete prohlídku nainstalovat a spustit lokálně spuštěním těchto dvou příkazů:
$ go get golang.org/x/tour/gotour$ mám
Druhý řádek by měl spustit webový server a otevřít okno prohlížeče. To bude vypadat přesně jako online prohlídka, ale může běžet trochu rychleji, protože vytváří a spouští ukázky kódu na vašem vlastním počítači. Po dokončení stiskněte Ctrl-C v příkazovém okně a zastavte server.
Prohlídka je rozdělena do tří částí. Chci, abyste prošli celou prohlídkou, včetně kvízů, ale každou část shrnu níže jako přehled a položím vám několik otázek. Odpovědi na své otázky uvádím na konci článku (žádné pokukování!).
Přejít na základy jazyka

Přejít na základní lekci 1

Otázka 1. V tomto příkladu existují tři balíčky. Co to je a jak se používají? Proč program vždy vrátí stejné číslo, i když existuje rand
funkce?
Všimněte si, že jsem nezavolal Lekce 2. Nevynechávejte lekce jen proto, že jsem je nekomentoval.
Jděte na základní lekci 3

Pokud spustíte tento příklad, zobrazí se chybové zprávy:
prog.go: 9: 14: nemůže odkazovat na nevyvezené jméno math.piprog.go: 9: 14: undefined: math.pi
Otázka 2. Proč chyby? Jak můžete program opravit?
Jděte na základní lekci 4

Otázka 3. Porovnejte toto prohlášení s ekvivalentem v C. Co se liší?
Jděte na základní lekci 8

Otázka 4. Proč tento program nevyvolává žádné chyby?
Jděte na základní lekci 10

Otázka 5. Jaký je typ k
? Proč? Pokud typ není zřejmý, podívejte se na lekci 11 a zjistěte, jak jej zobrazit.
Jděte na základní lekci 12

Tato lekce odpovídá na otázku, kterou jsem položil v lekci 8.
Jděte na lekci Řízení toku 1

Otázka 6. Jak se to liší od pro
smyčka ve vašem oblíbeném jazyce? Myslíte si, že další smyčkové konstrukce ve vašem oblíbeném jazyce jsou nezbytné? Změní váš názor další informace v následujících třech lekcích?
Jděte na lekci Flow Control 7

Před spuštěním tohoto programu jej zkontrolujte a napište, co si myslíte, že vytiskne. Spusťte program. Měl jsi pravdu? Pokud ne, čemu jste nerozuměli?
Jděte na lekci Řízení toku 8

Toto je druh cvičení, které byste mohli dostat na začátku pohovoru na tabuli. Načasujte si to, jak to budete řešit. Při řešení problému řekněte, na co myslíte.
Otázka 7. Zbytek části řízení toku je důležité pochopit. Po absolvování lekcí 9 až 13 vysvětlete Go přepínač
a odložit
příkazy takovým způsobem, aby se programátor C, Java nebo JavaScript mohl chytit.
Jdi na více typů lekce 1

Před spuštěním tohoto programu jej zkontrolujte a napište, co si myslíte, že vytiskne. Spusťte program. Měl jsi pravdu? Pokud ne, čemu jste nerozuměli?
Jak se cítíte, že máte ukazatele, ale ne aritmetiku ukazatele?
Projděte si sekci Více typů, dokud se nedostanete na cvičení v Lekce 18. Otázka 8. Co jste se dozvěděli o polích a řezech Go? Nyní dokončete cvičení.
Pokračujte v cvičení v lekci 23.
Otázka 9. Vysvětlete Go mapa
. Proč byste ho chtěli použít?
Dokončete sekci Další typy.
Otázka 10. Může být Go použit jako funkční programovací jazyk, přestože je kompilován? Kdy a proč byste používali uzávěry?
Go metody a rozhraní

Projděte si všech 25 lekcí v této části počínaje //tour.golang.org/methods/1.
Otázka 11. Až budete hotovi, vysvětlete, jak se metody a rozhraní Go liší od tříd C ++. Který se vám líbí lépe? Proč?
Jděte souběžně

Goroutine je jednou z definujících funkcí Go pro souběžnost. V první lekci v sekci souběžnosti zkuste zkontrolovat program (níže) a zapište si, co si myslíte, že se vytiskne.

Spusťte program. Měl jsi pravdu? Vysvětlete, co se vlastně děje a proč.
Kanály jsou způsob, jak implicitně synchronizovat goroutiny. V další lekci (níže) se znovu pokuste zkontrolovat program před spuštěním.

Otázka 12. Proč je v tomto příkladu pouze jeden kanál, přestože existují dvě hovory goroutine?
Příkaz select umožňuje goroutine čekat na více komunikačních operací. Jaké je pořadí spouštění příkazů v níže uvedeném programu?

Cvičení na ekvivalentních binárních stromech je dalším, na které se můžete setkat v rozhovoru na tabuli. Při implementaci řešení si udělejte čas a vysvětlete své myšlení. Podobně proveďte cvičení implementace webového prohledávače, jako byste byli v rozhovoru.
Odpovědi na otázky Go
Odpověď 1. Balíčky jsou označeny balík
prohlášení pro aktuální program a import
prohlášení pro používané externí balíčky. V tomto jednoduchém programu hlavní
je vlastní balíček programu a importuje se fmt
aby mohl tisknout, a matematika
/rand
aby mohl vygenerovat náhodné číslo.
Různé metody v rand
při generování náhodných čísel se spoléhají na čas hodin, ale čas je pevně nastaven na mám
životní prostředí. V rámci následného cvičení najděte balíček a metodu, která hlásí čas (nápověda: pokud se zaseknete, podívejte se sem) a použijte jej k tisku aktuálního času. Spusťte to několikrát v mám
prostředí, a také lokálně vytvořit program a spustit ho několikrát na svém vlastním počítači.
Odpověď 2. Export v Go musí být vždy velkými písmeny a jazyk rozlišuje velká a malá písmena. matematika. Pi
je správná metoda.
Odpověď 3. V deklaracích proměnných C / C ++ postupujte podle formuláře (např.
int i, j, k;
), zatímco v Go přejde typ za názvem proměnné a lze jej vynechat, pokud lze odvodit typ. V C / C ++ návratový typ předchází názvu funkce, zatímco v Go jde za seznam parametrů funkce a před tělo funkce. V C / C ++ jsou koncové středníky povinné.
Odpověď 4. Nevyvolává chyby, protože proměnné Go, které nejsou jinak nastaveny, jsou inicializovány na nulovou hodnotu typu, např. 0
nebo Nepravdivé
. V C / C ++ kompilátor označí neinicializované proměnné.
Odpověď 5.k
je celé číslo, protože bylo inicializováno na 3
.