Skip to content

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.

20–30 minEstimated6 questionsTailored live12 model answersTo study
  • Voice interview
  • Live feedback
  • Browser-only
  • No installation required

Your report · sample

AI Readiness Score

/100
Content score English 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.

  1. Step 01

    Preparation

    Skim the topics and warm up — you're briefed before takeoff.

  2. Step 02

    AI Interview

    A realistic AI interviewer asks tailored questions — answer by voice or text.

  3. Step 03

    Instant Score

    Finish and get a 0–100 readiness score across content and English.

  4. Step 04

    AI Feedback

    Concrete tips and a rewritten model answer for every response.

  5. 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.

aevrofy.com/session · live demoPlaying

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?

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?

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?

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?

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?

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, false
06What should you know about how slices grow with append?

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?

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?

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++ } // mutates
09How do interfaces work in Go?

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?

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?

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 := <-ch
12What do defer, panic, and recover do?

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

Aevrofy · Go beginner interview prep