Go pro mobilní vývoj: serverová část, API a nástroje

Autor: IT Sectr Publikováno: 2026-02-11 Doba čtení: 10 min

Go — kompilovaný programovací jazyk od společnosti Google, vytvořený v roce 2009 Robertem Griesemerem, Robem Pikem a Kenem Thompsonem. Go kombinuje jednoduchost syntaxe s výkonem na úrovni C. V mobilním vývoji se Go používá pro serverovou část, mikroslužby, API brány a CLI nástroje. Podle Stack Overflow Survey (2025) patří Go mezi deset nejlépe placených programovacích jazyků.

Hlavní

  • Go — kompilovaný jazyk se statickým typováním, vestavěnou podporou konkurence a rychlým kompilováním
  • Goroutines — lehká vlákna pro souběžné provádění, spotřebovávající ~4 KB na gorutinu
  • Serverová část v Go zajišťuje vysoký výkon mikroslužeb pro mobilní aplikace
  • CLI nástroje v Go se kompilují do jednoho statického binárního souboru bez externích závislostí
  • Gomobile umožňuje kompilovat kód Go do nativních knihoven .aar a .xcframework

Co je Go?

Go — staticky typovaný kompilovaný jazyk s automatickou správou paměti pomocí garbage collectoru. Hlavní cíle Go: rychlá kompilace, jednoduchost kódu a vestavěná podpora konkurence. Go se kompiluje do nativního binárního souboru bez virtuálního stroje — jeden spustitelný soubor obsahuje vše včetně závislostí.

Standardní knihovna Go pokrývá HTTP server, JSON marshaling, parsování příznaků příkazového řádku, šifrování a práci s databázemi. Pro HTTP server není potřeba externí framework — net/http je vestavěný. Go Modules (od verze 1.16) — standardní systém správy závislostí. Aktuální verze — Go 1.23 (2025) s vylepšeným balíčkem iter pro iterátory.

Go byl navržen k řešení problémů škálování, kterým čelil Google: pomalé kompilování C++, složitost Java, neefektivní konkurence Pythonu. Výsledek — jazyk, ve kterém jsou napsány Docker, Kubernetes, Prometheus, Terraform a Hugo.

Syntaxe Go

Go je minimalistický: 25 klíčových slov (pro srovnání C++ jich má 84). Chybí třídy, dědičnost, generika (do verze 1.18), přetěžování operátorů a výjimky. Chyby jsou zpracovávány explicitně návratem err. Struktury a rozhraní nahrazují OOP.

go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

type User struct {
	ID    int    `json:"id"`
	Name  string `json:"name"`
	Email string `json:"email"`
}

func userHandler(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")
	user := User{ID: 1, Name: "Alice", Email: "alice@example.com"}
	json.NewEncoder(w).Encode(user)
}

func main() {
	http.HandleFunc("/api/user", userHandler)
	fmt.Println("Server na :8080")
	http.ListenAndServe(":8080", nil)
}

Struktura User s JSON tagy definuje serializaci. http.HandleFunc registruje handler. json.NewEncoder(w).Encode(user) serializuje strukturu přímo do JSON v odpovědi. Vestavěný HTTP server zpracovává požadavky automaticky v oddělených gorutinách.

Gorutiny a kanály: model konkurence v Go

Goroutines — lehká prováděcí vlákna spravovaná runtime Go. Na rozdíl od OS vláken (zásobník 1–8 MB) gorutina startuje se zásobníkem 4 KB, který dynamicky roste. Na jednom serveru lze spustit 100 000 gorutin. Spuštění gorutiny — go functionName().

Kanály (channels) — typované fronty pro přenos dat mezi gorutinami. Kanál se vytváří přes make(chan Type). Operátor <- odesílá data, <-chan přijímá. Kanály mohou být bufferované (s kapacitou) a nebufferované (synchronní).

go
package main

import (
	"fmt"
	"net/http"
	"time"
)

func fetchURL(url string, ch chan<- string) {
	start := time.Now()
	resp, err := http.Get(url)
	if err != nil {
		ch <- fmt.Sprintf("Chyba: %s", err)
		return
	}
	defer resp.Body.Close()
	elapsed := time.Since(start)
	ch <- fmt.Sprintf("%s — %dms", url, elapsed.Milliseconds())
}

func main() {
	urls := []string{"https://google.com", "https://github.com", "https://stackoverflow.com"}
	ch := make(chan string, len(urls))

	for _, url := range urls {
		go fetchURL(url, ch)
	}

	for range urls {
		fmt.Println(<-ch)
	}
}

Tři požadavky jsou prováděny paralelně pomocí go fetchURL. Kanál ch shromažďuje výsledky. defer resp.Body.Close() garantuje uzavření odpovědi při návratu z funkce. select {} není použit, protože všechny gorutiny odesílají do kanálu — hlavní vlákno čte přesně len(urls) krát.

Go pro serverovou část mobilních aplikací

Go — jeden z nejlepších jazyků pro backend mobilních aplikací. Vestavěný HTTP/2 a HTTP/3, rychlá serializace protobuf/gRPC a nízká spotřeba paměti činí Go ideálním pro API obsluhující tisíce mobilních klientů.

Populární frameworky: Gin (až 10x rychlejší než Express.js), Echo (minimalistický, JWT middleware), Fiber (ve stylu Express), Chi (kompatibilní s net/http). Gin je nejpopulárnější s 70k+ hvězdičkami na GitHubu. Pro gRPC se používá google.golang.org/grpc.

go
package main

import (
	"database/sql"
	"log"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"
	_ "github.com/mattn/go-sqlite3"
)

func main() {
	db, err := sql.Open("sqlite3", "mobile_app.db")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	r := gin.Default()
	r.GET("/api/v1/posts", func(c *gin.Context) {
		type Post struct {
			ID        int       `json:"id"`
			Title     string    `json:"title"`
			CreatedAt time.Time `json:"created_at"`
		}
		rows, _ := db.Query("SELECT id, title, created_at FROM posts ORDER BY created_at DESC LIMIT 20")
		defer rows.Close()

		var posts []Post
		for rows.Next() {
			var p Post
			rows.Scan(&p.ID, &p.Title, &p.CreatedAt)
			posts = append(posts, p)
		}
		c.JSON(http.StatusOK, posts)
	})
	r.Run(":8080")
}

Gin.GET registruje trasu s handlrem. sql.Open otevírá SQLite databázi, db.Query provádí dotaz. c.JSON serializuje slice posts do JSON pole. Anonymní funkce uvnitř GET zachycuje db z vnějšího kontextu. Gin zpracovává panic, loguje požadavky a podporuje middleware.

Mikroslužby a API brány v Go

Go — hlavní jazyk pro mikroslužbovou architekturu. Nízká spotřeba paměti na mikroslužbu (15–30 MB) umožňuje provozovat desítky služeb na jednom serveru. Rychlý start (milisekundy) a malá velikost binárního souboru (10–20 MB) zjednodušují nasazení v kontejnerech.

API brána v Go agreguje požadavky z mobilní aplikace k interním službám. Golang brána zpracovává autentizaci (JWT), rate limiting, routování a caching. Populární implementace: Kong (založený na OpenResty a Go pluginech), Tyk (v Go), vlastní brány v Gin.

gRPC a protobuf

gRPC — framework pro vzdálené volání procedur od Google, používající Protocol Buffers pro serializaci a HTTP/2 pro transport. Go má nejlepší podporu gRPC ze všech jazyků. Pro mobilní backend poskytuje gRPC 5–10 krát vyšší propustnost než REST/JSON.

go
package main

import (
	"context"
	"log"
	"net"

	"google.golang.org/grpc"
	pb "example.com/proto"
)

type server struct {
	pb.UnimplementedUserServiceServer
}

func (s *server) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.UserResponse, error) {
	return &pb.UserResponse{
		Id:    req.Id,
		Name:  "Alice",
		Email: "alice@example.com",
	}, nil
}

func main() {
	lis, _ := net.Listen("tcp", ":50051")
	s := grpc.NewServer()
	pb.RegisterUserServiceServer(s, &server{})
	log.Fatal(s.Serve(lis))
}

pb.UnimplementedUserServiceServer — stub generovaný protoc ze souboru .proto. Struktura server přepisuje metodu GetUser. grpc.NewServer() vytváří server s interceptory pro logování, autentizaci a metriky.

Go pro CLI nástroje a vývojářské nástroje

Go — nejlepší jazyk pro CLI nástroje používané v mobilním vývoji. Jeden statický binární soubor (~10 MB) bez závislostí funguje na všech platformách: macOS, Linux, Windows. Kompilace trvá sekundy. Go nástroje nevyžadují instalaci interpretru nebo runtime.

Příklady Go nástrojů v mobilním ekosystému: Migrate (migrace DB), Kubectl (Kubernetes pro mobilní backend), Terraform (infrastruktura), Prometheus (monitoring). Vývojáři píší Go nástroje pro generování modelů z proto souborů, validaci konfigurací a nasazování mikroslužeb.

go
package main

import (
	"flag"
	"fmt"
	"os"
)

func main() {
	project := flag.String("project", "", "Project directory")
	version := flag.String("version", "1.0.0", "App version")
	verbose := flag.Bool("verbose", false, "Verbose output")
	flag.Parse()

	if *project == "" {
		fmt.Println("Použití: deploy --project=path [--version=x.x.x]")
		os.Exit(1)
	}

	if *verbose {
		fmt.Printf("Nasazení projektu %s verze %s
", *project, *version)
	}
	// zde logika nasazení
	fmt.Println("Nasazení dokončeno")
}

flag.String definuje řetězcový příznak příkazového řádku se jménem, výchozí hodnotou a popisem. flag.Parse() parsuje argumenty os.Args. Ukazatele *project jsou dereferencovány pro získání hodnot. Binární soubor se sestavuje příkazem go build -o deploy deploy.go.

Gomobile: Go v nativních knihovnách pro iOS a Android

Gomobile — nástroj Google pro kompilaci kódu Go do nativních mobilních knihoven. go bind -target=android generuje .aar pro Android, go bind -target=ios generuje .xcframework pro iOS. To umožňuje psát společnou obchodní logiku v Go a volat ji z Kotlin a Swift.

Hlavní scénáře Gomobile: kryptografie (vlastní šifrovací schémata), práce se sítí (vlastní protokol přes WebSocket), zpracování dat (komprese, kódování, parsování). UI se v Go nepíše — jeho úkolem je nahradit C++ pro cross-platform nativní moduly.

go
package mobile

import "crypto/aes"

// EncryptData šifruje data AES-256-GCM (exportováno do .aar)
func EncryptData(key []byte, plaintext []byte) ([]byte, error) {
	block, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}
	ciphertext := make([]byte, len(plaintext))
	block.Encrypt(ciphertext, plaintext)
	return ciphertext, nil
}

func DecryptData(key []byte, ciphertext []byte) ([]byte, error) {
	block, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}
	plaintext := make([]byte, len(ciphertext))
	block.Decrypt(plaintext, ciphertext)
	return plaintext, nil
}

Exportované funkce (s velkým písmenem) Gomobile zabaluje do rozhraní Java/Swift. Z Kotlinu volání vypadá jako Mobile.encryptData(key, plaintext). Gomobile automaticky konvertuje typy: []byte → byte[] (Java) / Data (Swift).

PříkazVýsledekPlatforma
gomobile bind -target=androidknihovna .aarAndroid
gomobile bind -target=ios.xcframeworkiOS
gomobile build -target=android.apk s aktivitou GoAndroid

Go vs Java a Kotlin pro backend: srovnání

Go konkuruje Javě a Kotlinu v serverovém vývoji. Klíčové rozdíly: Go se kompiluje do nativního binárního souboru, nevyžaduje JVM, spotřebovává 2–3 krát méně paměti a startuje v milisekundách. Java vítězí ve vyspělosti ekosystému a počtu knihoven.

KritériumGoJava / Kotlin
KompilaceNativní binární soubor (~10 MB)JVM bytecode + JIT
Start1–5 ms1–5 s (start JVM)
Spotřeba RAM15–30 MB na službu50–200 MB na službu
AsynchronnostGoroutines (vestavěné)Korutiny / RxJava
EkosystémRostoucí, 100k+ repozitářůVyspělý, miliony knihoven
Učení2–4 týdny6–12 měsíců (Java)

Go je voleno pro mikroslužby, API brány a nástroje. Java/Kotlin — pro enterprise aplikace s bohatou obchodní logikou. V mobilním vývoji je optimální kombinace: Go pro backend, Kotlin/Swift pro klienta.

Často kladené otázky

Čím se Go liší od Javy a Kotlinu pro serverový vývoj?

Go se kompiluje do jednoho statického binárního souboru bez JVM, spotřebovává méně paměti a startuje rychleji. Asynchronnost pomocí gorutin je snazší než RxJava nebo korutiny Kotlin. Pro mikroslužby se Go volí pro jednoduchost a výkon.

Jaké Go frameworky se používají pro backend mobilních aplikací?

Nejpopulárnější: Gin (vysoký výkon), Echo (minimalistický), Fiber (ve stylu Express.js), Chi (lehký a kompatibilní). Pro real-time se používá WebSocket Gorilla nebo Melody. Pro gRPC — google.golang.org/grpc.

Lze psát mobilní aplikace v Go?

Ano, přes Gomobile lze kompilovat Go do .aar (Android) a .xcframework (iOS). Nicméně UI se v Go nepíše — není to účelné kvůli omezenému ekosystému. Go je efektivní pro nativní knihovny, kryptografii a práci se sítí.

Je Go vhodné pro projekty s vysokým zatížením?

Ano, Go je navržen pro systémy s vysokým zatížením. Společnosti Cloudflare, Uber, Twitch, Dropbox používají Go v produkci. Vestavěný plánovač gorutin zpracovává miliony souběžných úloh na jednom serveru.

Je těžké naučit se Go po Javě nebo Kotlinu?

Go je jednodušší než Java — nejsou zde třídy, dědičnost, výjimky. Syntaxe je minimalistická, struktury a rozhraní nahrazují OOP. Většina vývojářů zvládne Go za 2–4 týdny.

Shrnutí

  • Go — kompilovaný jazyk se statickým typováním, vestavěnými gorutinami a rychlou kompilací do nativního binárního souboru
  • Gorutiny a kanály — model konkurence zpracovávající miliony úloh s minimální spotřebou paměti
  • Serverová část v Go se staví na Gin/Echo/Fiber s připojením SQL a Redis přes standardní ovladače
  • Mikroslužby v Go startují v milisekundách, spotřebovávají 15–30 MB a běží v kontejnerech
  • gRPC a protobuf — optimální transport pro Go backend mobilních aplikací s vysokou propustností
  • Gomobile kompiluje Go do .aar a .xcframework pro cross-platform nativní knihovny
  • Go vs Java: Go startuje rychleji a je lehčí, Java — bohatší ekosystém; optimální kombinace — Go pro backend, Kotlin/Swift pro klienta

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také