Boarding pass · Go Beginner
Go · Beginner interview
An AI mock interview for developers new to Go (0–2 years). Practise the syntax and types, slices and maps, structs and interfaces, and an intro to goroutines — out loud, with a readiness score.
- Voice interview
- Live feedback
- Browser-only
- No installation required
Your report · sample
AI Readiness Score
Finish the mock and get this report — scored on content and English, with concrete tips and a model answer for every question, plus a study plan.
Your flight path
Five steps to interview-ready.
From a quick warm-up to a personalised study plan — here's the whole loop, and what you get at each gate.
Step 01
Preparation
Skim the topics and warm up — you're briefed before takeoff.
Step 02
AI Interview
A realistic AI interviewer asks tailored questions — answer by voice or text.
Step 03
Instant Score
Finish and get a 0–100 readiness score across content and English.
Step 04
AI Feedback
Concrete tips and a rewritten model answer for every response.
Step 05
Study Plan
A personalised plan targets your weakest areas — so the next run scores higher.
Preview the AI demo
See one answer scored, end to end.
The whole loop on sample data — question, your answer, instant feedback and a study plan. Hover to pause.
Interviewer · Question 1
“Tell me about yourself.”
Who it's for
- Developers new to Go
- Engineers switching to Go for backend work
- Anyone targeting junior Go roles
- Self-taught devs prepping for interviews
What you'll practice
- Go syntax, zero values and error handling
- Slices, maps and their behaviour
- Structs, methods and interfaces
- Goroutines and channels basics
Topics covered
What this level expects.
Basics
- Go's design
- Zero values & :=
- Error values
Data
- Arrays vs slices
- Maps
- Slice internals
Types & methods
- Structs
- Pointer vs value receivers
- Interfaces
Concurrency
- Goroutines
- Channels
- defer/panic/recover
Practice questions
12 questions, with model answers.
Read them, then run the live mock to answer out loud and get scored. Tap any question to reveal a model answer.
01What makes Go's design distinctive?Basics
Go is a statically typed, compiled language built for simplicity, fast compilation, and concurrency. It deliberately omits features like inheritance, generics-everywhere, and exceptions in favour of a small spec, composition, explicit error handling, and built-in goroutines/channels. The result is code that's easy to read and maintain across large teams, with a fast toolchain and good performance.
02What are zero values, and what's the difference between := and var?Basics
Every type has a zero value used when you declare a variable without initializing it — 0 for numbers, "" for strings, false for bool, nil for pointers/slices/maps. var declares a variable (optionally with a type and value); := is short declaration that infers the type from the value and only works inside functions. Zero values mean you rarely have 'uninitialized' bugs.
var count int // 0 name := "Ada" // inferred string
03How does Go handle errors?Basics
Go has no exceptions for ordinary errors; functions return an error value as their last result, and you check it explicitly with if err != nil. This makes error paths visible and forces you to handle them where they happen. panic/recover exists for truly exceptional, unrecoverable situations, not normal control flow.
f, err := os.Open(path)
if err != nil { return err }04What's the difference between an array and a slice?Data
An array has a fixed size that's part of its type ([3]int), so it's rarely used directly. A slice is a flexible, dynamically-sized view over an underlying array, with a length and capacity, and is what you use in practice. You create slices with literals or make, and grow them with append.
05How do maps work in Go?Data
A map is Go's hash table, mapping keys to values, created with make or a literal. Accessing a missing key returns the value type's zero value, and the two-return form (v, ok := m[k]) tells you whether the key existed. Maps aren't safe for concurrent writes, and iteration order is randomized intentionally.
m := map[string]int{"a": 1}
v, ok := m["b"] // 0, false06What should you know about how slices grow with append?Data
A slice has a length (elements in use) and capacity (room in the underlying array). append adds elements; if capacity is exceeded it allocates a new, larger array and copies, so the returned slice may point to different memory — which is why you always reassign s = append(s, x). Slices also share backing arrays, so a sub-slice can alias and mutate the original.
07What is a struct in Go?Types & methods
A struct is a composite type grouping named fields, Go's main way to model data (there are no classes). You attach behaviour by defining methods on the struct type, and you compose structs by embedding rather than inheriting. Structs are value types, so assigning or passing one copies it unless you use a pointer.
type User struct { ID string; Age int }08What's the difference between a pointer and a value receiver on a method?Types & methods
A value receiver gets a copy, so it can't modify the original and is fine for small, immutable data. A pointer receiver operates on the original, so it can mutate it and avoids copying large structs. The convention is to be consistent per type and use pointer receivers when you mutate state or the struct is large.
func (u *User) Birthday() { u.Age++ } // mutates09How do interfaces work in Go?Types & methods
An interface defines a set of method signatures, and any type that implements those methods satisfies it automatically — there's no 'implements' keyword (structural/implicit satisfaction). This decouples code: functions accept interfaces and work with any concrete type providing the behaviour. Small interfaces (often one method, like io.Reader) are idiomatic.
10What is a goroutine?Concurrency
A goroutine is a lightweight thread managed by the Go runtime — you start one by prefixing a call with the go keyword. They're cheap (a few KB of stack, growing as needed), so you can run thousands. The runtime multiplexes them onto OS threads, making concurrent I/O easy without manual thread management.
go process(item) // runs concurrently
11What are channels used for?Concurrency
Channels are typed conduits for sending and receiving values between goroutines, providing safe communication and synchronization without shared-memory locks — Go's motto is 'share memory by communicating'. Sending and receiving block until the other side is ready (for unbuffered channels), which coordinates goroutines naturally. You close a channel to signal no more values.
ch := make(chan int)
go func() { ch <- 42 }()
v := <-ch12What do defer, panic, and recover do?Concurrency
defer schedules a function call to run when the surrounding function returns, commonly for cleanup like closing files — it runs even if the function panics. panic stops normal flow and unwinds the stack; recover, called in a deferred function, stops a panic and lets you handle it. You use panic/recover sparingly, for unrecoverable errors, not normal error handling.
Preparation tips
Walk in ready.
- Get comfortable with error-as-value handling
- Understand slice len vs cap and append
- Know when to use a pointer receiver
- Practise a goroutine + channel example
Ready for the real thing?
Run a 6-question Go mock interview, answer out loud, and get a readiness score with tips and model answers.
More beginner interviews