Go ist eine kompilierte Programmiersprache von Google, die 2009 von Robert Griesemer, Rob Pike und Ken Thompson entwickelt wurde. Go kombiniert einfache Syntax mit C-Niveau-Leistung. In der mobilen Entwicklung wird Go für Backend, Microservices, API-Gateways und CLI-Dienstprogramme verwendet. Laut Stack Overflow Survey (2025) gehört Go zu den zehn bestbezahlten Programmiersprachen.
Wichtige Punkte
Go ist eine statisch typisierte kompilierte Sprache mit automatischer Speicherverwaltung durch Garbage Collection. Die Hauptziele von Go: schnelle Kompilierung, Code-Einfachheit und eingebaute Nebenläufigkeit. Go kompiliert zu einer nativen Binärdatei ohne virtuelle Maschine — eine einzige ausführbare Datei enthält alles, einschließlich Abhängigkeiten.
Die Go-Standardbibliothek deckt HTTP-Server, JSON-Marshalling, Kommandozeilen-Flag-Parsing, Verschlüsselung und Datenbankoperationen ab. Für einen HTTP-Server wird kein externes Framework benötigt — net/http ist integriert. Go Modules (seit v1.16) ist das Standard-Abhängigkeitsverwaltungssystem. Die aktuelle Version ist Go 1.23 (2025) mit einem verbesserten iter-Paket für Iteratoren.
Go wurde entwickelt, um die Skalierungsprobleme von Google zu lösen: langsame C++-Kompilierung, Java-Komplexität, ineffiziente Python-Nebenläufigkeit. Das Ergebnis ist eine Sprache, die Docker, Kubernetes, Prometheus, Terraform und Hugo antreibt.
Go ist minimalistisch: 25 Schlüsselwörter (im Vergleich zu 84 in C++). Es gibt keine Klassen, Vererbung, Generics (bis v1.18), Operatorüberladung oder Ausnahmen. Fehler werden explizit durch Rückgabe von err behandelt. Strukturen und Schnittstellen ersetzen OOP.
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 on :8080")
http.ListenAndServe(":8080", nil)
}Die User-Struktur mit JSON-Tags definiert die Serialisierung. http.HandleFunc registriert einen Handler. json.NewEncoder(w).Encode(user) serialisiert die Struktur direkt in die Antwort als JSON. Der integrierte HTTP-Server bearbeitet Anfragen automatisch in separaten Goroutines.
Goroutines sind leichtgewichtige Ausführungsthreads, die von der Go-Laufzeitumgebung verwaltet werden. Im Gegensatz zu OS-Threads (1–8 MB Stack) startet eine Goroutine mit einem 4 KB Stack, der dynamisch wächst. Auf einem einzelnen Server können 100.000 Goroutines ausgeführt werden. Starten einer Goroutine — go functionName().
Kanäle (channels) sind typisierte Warteschlangen zur Datenübertragung zwischen Goroutines. Ein Kanal wird über make(chan Type) erstellt. Der <-Operator sendet Daten, <-chan empfängt sie. Kanäle können gepuffert (mit Kapazität) oder ungepuffert (synchron) sein.
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("Error: %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)
}
}Drei Anfragen werden gleichzeitig über go fetchURL ausgeführt. Der Kanal ch sammelt Ergebnisse. defer resp.Body.Close() stellt sicher, dass die Antwort beim Verlassen der Funktion geschlossen wird. select {} wird nicht verwendet, da alle Goroutines in den Kanal senden — die Hauptgoroutine liest genau len(urls) Mal.
Go ist eine der besten Sprachen für das Backend mobiler Anwendungen. Integriertes HTTP/2 und HTTP/3, schnelle protobuf/gRPC-Serialisierung und geringer Speicherverbrauch machen Go ideal für APIs, die tausende mobile Clients bedienen.
Beliebte Frameworks: Gin (bis zu 10x schneller als Express.js), Echo (minimalistisch, JWT-Middleware), Fiber (Express-ähnlich), Chi (net/http-kompatibel). Gin ist das beliebteste mit 70k+ GitHub-Sternen. Für gRPC wird google.golang.org/grpc verwendet.
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 registriert eine Route mit einem Handler. sql.Open öffnet eine SQLite-Datenbank, db.Query führt eine Abfrage aus. c.JSON serialisiert das Slice posts in ein JSON-Array. Die anonyme Funktion innerhalb von GET erfasst db aus dem äußeren Kontext. Gin behandelt Panics, protokolliert Anfragen und unterstützt Middleware.
Go ist die primäre Sprache für Microservice-Architekturen. Der geringe Speicherverbrauch pro Microservice (15–30 MB) ermöglicht den Betrieb Dutzender Dienste auf einem Server. Schnelles Starten (Millisekunden) und kleine Binärgröße (10–20 MB) vereinfachen die Containerbereitstellung.
Ein API-Gateway in Go aggregiert Anfragen von einer mobilen App an interne Dienste. Ein Go-Gateway übernimmt Authentifizierung (JWT), Ratenbegrenzung, Routing und Caching. Beliebte Implementierungen: Kong (basierend auf OpenResty mit Go-Plugins), Tyk (in Go), benutzerdefinierte Gateways auf Gin.
gRPC ist ein Remote-Procedure-Call-Framework von Google, das Protocol Buffers zur Serialisierung und HTTP/2 als Transport verwendet. Go hat die beste gRPC-Unterstützung aller Sprachen. Für mobile Backends bietet gRPC einen 5–10x höheren Durchsatz als REST/JSON.
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 ist ein von protoc aus der .proto-Datei generierter Stub. Die Server-Struktur überschreibt die GetUser-Methode. grpc.NewServer() erstellt einen Server mit Interceptoren für Logging, Authentifizierung und Metriken.
Go ist die beste Sprache für CLI-Dienstprogramme, die in der mobilen Entwicklung verwendet werden. Eine einzelne statische Binärdatei (~10 MB) ohne Abhängigkeiten läuft auf allen Plattformen: macOS, Linux, Windows. Die Kompilierung dauert Sekunden. Go-Dienstprogramme benötigen keine Installation eines Interpreters oder einer Laufzeitumgebung.
Beispiele für Go-Tools im mobilen Ökosystem: Migrate (DB-Migrationen), Kubectl (Kubernetes für mobiles Backend), Terraform (Infrastruktur), Prometheus (Überwachung). Entwickler schreiben Go-Dienstprogramme zur Generierung von Modellen aus Proto-Dateien, Validierung von Konfigurationen und Bereitstellung von Microservices.
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("Usage: deploy --project=path [--version=x.x.x]")
os.Exit(1)
}
if *verbose {
fmt.Printf("Deploying project %s version %s\n", *project, *version)
}
// hier die Bereitstellungslogik
fmt.Println("Deploy complete")
}flag.String definiert ein String-Kommandozeilen-Flag mit Namen, Standardwert und Beschreibung. flag.Parse() analysiert die Argumente os.Args. Zeiger *project werden dereferenziert, um Werte zu erhalten. Die Binärdatei wird mit go build -o deploy deploy.go erstellt.
Gomobile ist ein Google-Tool zum Kompilieren von Go-Code in native mobile Bibliotheken. go bind -target=android generiert .aar für Android, go bind -target=ios generiert .xcframework für iOS. Dies ermöglicht das Schreiben gemeinsamer Geschäftslogik in Go und den Aufruf aus Kotlin und Swift.
Hauptanwendungsfälle von Gomobile: Kryptographie (benutzerdefinierte Verschlüsselungsschemata), Netzwerk (eigenes WebSocket-Protokoll), Datenverarbeitung (Komprimierung, Kodierung, Parsing). UI wird nicht in Go geschrieben — sein Zweck ist es, C++ für plattformübergreifende native Module zu ersetzen.
package mobile
import "crypto/aes"
// EncryptData verschlüsselt Daten mit AES-256-GCM (exportiert nach .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
}Exportierte Funktionen (Großbuchstaben) werden von Gomobile in Java/Swift-Schnittstellen verpackt. Aus Kotlin sieht der Aufruf wie Mobile.encryptData(key, plaintext) aus. Gomobile konvertiert Typen automatisch: []byte → byte[] (Java) / Data (Swift).
| Befehl | Ergebnis | Plattform |
|---|---|---|
| gomobile bind -target=android | .aar-Bibliothek | Android |
| gomobile bind -target=ios | .xcframework | iOS |
| gomobile build -target=android | .apk mit Go-Aktivität | Android |
Go konkurriert mit Java und Kotlin in der Serverentwicklung. Hauptunterschiede: Go kompiliert zu einer nativen Binärdatei, benötigt keine JVM, verbraucht 2–3x weniger Speicher und startet in Millisekunden. Java punktet mit Reife des Ökosystems und der Anzahl der Bibliotheken.
| Kriterium | Go | Java / Kotlin |
|---|---|---|
| Kompilierung | Native Binärdatei (~10 MB) | JVM-Bytecode + JIT |
| Start | 1–5 ms | 1–5 s (JVM-Start) |
| RAM-Verbrauch | 15–30 MB pro Dienst | 50–200 MB pro Dienst |
| Nebenläufigkeit | Goroutines (eingebaut) | Koroutinen / RxJava |
| Ökosystem | Wachsend, 100k+ Repos | Ausgereift, Millionen Bibliotheken |
| Lernkurve | 2–4 Wochen | 6–12 Monate (Java) |
Go wird für Microservices, API-Gateways und Tools gewählt. Java/Kotlin — für Unternehmensanwendungen mit umfangreicher Geschäftslogik. In der mobilen Entwicklung ist der optimale Stack: Go für Backend, Kotlin/Swift für den Client.
Häufig gestellte Fragen
Go kompiliert zu einer einzigen statischen Binärdatei ohne JVM, verbraucht weniger Speicher und startet schneller. Asynchronität über Goroutines ist einfacher als RxJava oder Kotlin-Koroutinen. Für Microservices wird Go wegen seiner Einfachheit und Leistung gewählt.
Die beliebtesten: Gin (hohe Leistung), Echo (minimalistisch), Fiber (Express.js-Stil), Chi (leicht und kompatibel). Für Echtzeit werden WebSocket Gorilla oder Melody verwendet. Für gRPC — google.golang.org/grpc.
Ja, über Gomobile kann Go in .aar (Android) und .xcframework (iOS) kompiliert werden. UI wird jedoch nicht in Go geschrieben — aufgrund des begrenzten Ökosystems ist das nicht praktikabel. Go ist effektiv für native Bibliotheken, Kryptographie und Netzwerk.
Ja, Go wurde für Hochlastsysteme entwickelt. Unternehmen wie Cloudflare, Uber, Twitch, Dropbox verwenden Go in der Produktion. Der eingebaute Goroutine-Scheduler bewältigt Millionen gleichzeitiger Aufgaben auf einem einzelnen Server.
Go ist einfacher als Java — es gibt keine Klassen, Vererbung oder Ausnahmen. Die Syntax ist minimalistisch, Strukturen und Schnittstellen ersetzen OOP. Die meisten Entwickler lernen Go in 2–4 Wochen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch