So bestehst du das Go-Vorstellungsgespräch: Top-Fragen von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

So bestehst du das Go-Vorstellungsgespräch: Top-Fragen von A bis Z



Ein Vorstellungsgespräch für eine Stelle als Go-Entwickler ist nicht nur eine Überprüfung der Syntax. Arbeitgeber suchen Kandidaten, die die Philosophie der Sprache verstehen: Einfachheit, Nebenläufigkeit und effiziente Speicherverwaltung. In diesem Artikel besprechen wir die wichtigsten Fragen, die dir garantiert gestellt werden – von den Grundlagen bis zu fortgeschrittenen Themen mit Codebeispielen. Bereite dich mit unserer Checkliste vor, und du wirst dich sicher fühlen.



1. Go-Grundlagen: Datentypen, Strukturen und Speicherverwaltung



Beginnen wir mit der Basis. Ohne sie geht es nicht. Interviewer stellen gerne Fragen zu Typen und ihrem Verhalten.



Welche eingebauten Datentypen gibt es in Go?

  • Basis: int, float64, string, bool.
  • Aggregierte: array, struct.
  • Referenztypen: slice, map, channel, pointer, function.


Was ist der Unterschied zwischen einem Array und einem Slice?

Ein Array hat eine feste Länge, die zur Kompilierzeit festgelegt wird. Ein Slice ist eine dynamische Struktur, die auf ein zugrunde liegendes Array verweist.

// Arrayvar arr [3]int = [3]int{1, 2, 3}arr[0] = 10 // Ok

// Sliceslc := []int{1, 2, 3}slc = append(slc, 4) // Länge kann wachsen

Knifflige Frage: Was passiert mit dem Speicher bei append, wenn die Kapazität des Slices überschritten wird? (Antwort: Go weist ein neues Array mit der doppelten Größe zu und kopiert die Daten).



Wie ist eine Map in Go aufgebaut?

Eine Map ist eine Hashtabelle. Die Reihenfolge der Durchquerung ist nicht garantiert. Beim Lesen eines nicht vorhandenen Schlüssels wird der Nullwert zurückgegeben (z. B. 0 für int).

m := make(map[string]int)m["key"] = 42value, ok := m["key"] // ok == true, wenn Schlüssel existiert


2. Nebenläufigkeit: Goroutinen, Kanäle und Mutexe

Dies ist das wichtigste Thema für Go. Ohne es wirst du das Vorstellungsgespräch nicht bestehen.



Was ist eine Goroutine und wie unterscheidet sie sich von einem OS-Thread?

Eine Goroutine ist ein leichtgewichtiger Thread, der von der Go-Laufzeitumgebung verwaltet wird. Der Stack einer Goroutine beginnt mit 2-4 KB (im Vergleich zu 1 MB bei einem OS-Thread). Tausende Goroutinen arbeiten auf mehreren OS-Threads (M:N-Modell).



Wie funktionieren Kanäle? Gib ein Beispiel für das Worker-Pool-Muster.

func worker(id int, jobs <-chan int, results chan<- int) {    for j := range jobs {        results <- j * 2    }}

func main() { jobs := make(chan int, 100) results := make(chan int, 100)

// Starte 3 Worker for w := 1; w <= 3; w++ { go worker(w, jobs, results) }

// Sende Aufgaben for j := 1; j <= 5; j++ { jobs <- j } close(jobs)

// Sammle Ergebnisse for r := 1; r <= 5; r++ { <-results }}


Was ist der Unterschied zwischen einem gepufferten und einem ungepufferten Kanal?

  • Ungepuffert: Der Sender blockiert, bis der Empfänger die Nachricht annimmt. Synchrone Kommunikation.
  • Gepuffert: Der Sender blockiert nur, wenn der Puffer voll ist. Asynchrone Kommunikation.


Wie vermeidet man einen Deadlock?

Verwende select mit einem Timeout oder default:

select {case msg := <-ch:    fmt.Println(msg)case <-time.After(1 * time.Second):    fmt.Println("timeout")}


3. Schnittstellen, Generics und Fehlerbehandlung

Go ist keine reine OOP-Sprache, aber Schnittstellen spielen hier eine Schlüsselrolle.



Wie funktioniert die Ententypisierung in Go?

Ein Typ implementiert eine Schnittstelle implizit, wenn er alle erforderlichen Methoden besitzt. Dies ermöglicht flexiblen Code.

type Stringer interface {    String() string}

type User struct { Name string}

func (u User) Str

Blogs

Buchempfehlungen