Balíčky, moduly a funkce main
Když poprvé začnete učit Go, syntaxe může vypadat jednoduše — ale pod povrchem se nachází několik extrémně důležitých pravidel, která musí každý Go program dodržovat.
- •Jak Go organizuje kód pomocí balíčků (packages)
- •Proč je balíček main speciální a jak funguje
- •Co je to funkce main a proč je nezbytná
- •Jak fungují import statements a standardní knihovna
- •Co jsou Go moduly a jak se používají
- •Jak vytvořit spustitelný soubor pomocí go build
Tři klíčové části každého Go programu
Podívejme se na jednoduchý Go soubor:
package main
import "fmt"
func main() {
fmt.Print("Hello world")
}Tento program již obsahuje základní komponenty každého platného Go programu:
Definuje, do kterého balíčku soubor patří
Přináší externí funkcionalitu (volitelné)
Vstupní bod programu
1. Packages — Jak Go organizuje kód
Na začátku každého Go souboru musíte deklarovat balíček:
package mainPokud tento řádek odstraníte, Go vyhodí chybu:
Expected package clause but found 'import'...Co je balíček?
Balíček je jednoduše způsob, jak seskupit související Go soubory dohromady.
- • Každý Go soubor patří právě jednomu balíčku
- • Balíček může zahrnovat více souborů
- • Příklady:
fmt,http,users,main
Proč main?
Protože main je speciální balíček.
Když je Go program zkompilován do spustitelného souboru, Go potřebuje vědět: "Kde program začíná?"
Pokud je váš balíček pojmenován main, Go s ním zachází jako se vstupním bodem. Pokud není pojmenován main, Go nevytvoří spustitelný soubor.
// Pokud změníte na:
package app
// A spustíte:
go build
// → Žádný spustitelný výstup, protože Go nenašel vstupní bod2. Import Statement — Přinášení externí funkcionality
Řádek:
import "fmt"přináší vestavěný balíček fmt (format) z Go.
Standardní knihovna Go je obrovská a fmt poskytuje tiskovací funkce jako Print, Println a Printf.
Když napíšete:
fmt.Print("Hello")voláte funkci z balíčku fmt. Hodnota "Hello" je stringový literál, vždy uzavřený v dvojitých uvozovkách (jednoduché uvozovky nejsou pro stringy v Go povoleny).
Standardní knihovna Go
Go obsahuje rozsáhlou standardní knihovnu s balíčky pro vše od HTTP serverů po práci se soubory, JSON, kryptografii a mnoho dalšího — vše zabudované.
3. Funkce main — Vstupní bod programu
Uvnitř balíčku main Go očekává právě jednu funkci s názvem main:
func main() {
fmt.Print("Hello world")
}Toto je první kód, který se provede při spuštění programu.
- 1.Musí existovat jedna a pouze jedna funkce main na balíček
- 2.Nemůže přijímat argumenty a nemůže vracet hodnotu
- 3.Go neprovádí kód, který se nachází na nejvyšší úrovni (mimo funkce), na rozdíl od jazyků jako JavaScript
Klíčové poznání
Funkce main je efektivně startovacím bodem vašeho programu. Bez ní Go neví, kde začít vykonávání.
4. Go Moduly — Identita vašeho projektu
Když spustíte:
go buildv úplně nové složce, můžete dostat tuto chybu:
go: cannot find main module...To proto, že Go vyžaduje, aby byl váš projekt součástí modulu.
Modul je jednoduše Go projekt s identitou.
Vytvoříte ho pomocí:
go mod init go-youtubeToto vygeneruje soubor go.mod:
module go-youtube
go 1.23.5Od této chvíle Go rozpozná složku jako modul a go build bude fungovat.
Best practice pro pojmenování Go modulů
Ekosystém Go očekává, že názvy modulů vypadají takto:
go mod init github.com/username/repo
go mod init gitlab.com/username/repo
go mod init example.com/project-nameTo proto, že název vašeho modulu slouží jako jeho cesta importu, pokud jej chtějí ostatní (nebo budoucí vy) použít jako závislost.
Vyhněte se takovým názvům:
go mod init go-youtube
go mod init myapp
go mod init testProč to není ideální:
- • Pokud později importujete vlastní modul, cesty vypadají divně: import "go-youtube/utils"
- • Pokud později přesunete repo na GitHub, zlomíte všechny importy
- • Neříká to Go (nebo ostatním vývojářům), kde modul žije
Příklad best practice
go mod init github.com/go-backend-journey/go-youtubeI když to nikdy nepublikujete na GitHub, je to stále naprosto platné. Go moduly nevyžadují, aby repo existovalo — je to pouze namespace.
5. Vytvoření samostatného spustitelného souboru
Jakmile váš modul existuje, můžete sestavit svůj program:
go buildToto vytvoří spustitelný soubor:
- •Na Windows →
go-youtube.exe - •Na Mac/Linux →
go-youtube
Dvakrát klikněte nebo spusťte:
./go-youtubeVýstup se objeví — dokonce i na počítačích bez nainstalovaného Go.
Síla Go
Toto je jedna z nejsilnějších vlastností Go: vytváříte skutečné, nativní spustitelné soubory. Žádný runtime, žádné závislosti — jen jediný binární soubor, který můžete spustit kdekoliv.
Shrnutí
- Packages: Každý Go soubor patří k balíčku. Balíček main je speciální — vytváří spustitelný program.
- Imports: Přinášejí funkcionalitu z ostatních balíčků. Standardní knihovna Go obsahuje vše od fmt po http.
- Funkce main: Vstupní bod vašeho programu. Musí být v balíčku main, nemůže přijímat parametry ani vracet hodnoty.
- Moduly: Definují identitu vašeho projektu. Vytvořte je pomocí go mod init s plně kvalifikovanou cestou.
- Build:
go buildvytváří nativní spustitelné soubory, které fungují bez Go runtime.
Praktické cvičení
Prakticky si procvičte vše, co jste se naučili:
- Vytvořte novou složku pro váš projekt
- Inicializujte Go modul s vhodným názvem (např.
github.com/your-name/hello-go) - Vytvořte soubor
main.gos balíčkem main a funkcí main - Naimportujte balíček
fmt - Vypište zprávu, která obsahuje vaše jméno a proč se učíte Go
- Sestavte program pomocí
go build - Spusťte vytvořený spustitelný soubor
Bonus úkol:
Zkuste změnit package main na package app a spusťte go build. Co se stane? Proč?