Learn Go (Golang)
A free, interactive online Go course. You write Go on every lesson - syntax, structs, slices, interfaces, goroutines, channels - with AI hints when concurrency gets weird, and a free certificate when you finish.
21,617+ codders enrolled
- Beginner friendly
AI-assisted coding help
Hands-on interactive lessons
Audio narration on every lesson
Quizzes to test your knowledge
Free certificate of completion
Syllabus
Section 1
Fundamentals
Start sectionStartExpandCollapseBuild a strong foundation with essential concepts and basic skillsIntroduction to Go
4 lessons423- 01What is Go?Challenge
- 02Hello WorldChallengeQuizAudio
- 03PrintlnChallengeQuizAudio
- 04Go CommentsChallengeQuizAudio
Variables and Basic Data Types
10 lessons1069- 01What is a variableChallengeQuizAudio
- 02Type Inference with `:=`ChallengeQuizAudio
- 03Integers (int)ChallengeQuizAudio
- 04Floating-Point NumbersChallengeQuizAudio
- 05BooleansChallengeQuizAudio
- 06StringsChallengeQuizAudio
- 07Zero ValuesChallengeQuizAudio
- 08ConstantsChallengeQuizAudio
- 09Naming ConventionsChallengeQuizAudio
- 10Recap - Variables and TypesChallenge
Basic Operators
7 lessons744- 01Arithmetic OperatorsChallengeQuizAudio
- 02Division OperatorChallengeQuizAudio
- 03The Modulo OperatorChallengeQuizAudio
- 04Assignment OperatorChallengeQuizAudio
- 05Augmented Assignment OperatorsChallengeQuizAudio
- 06Increment and DecrementChallengeQuizAudio
- 07Recap - CalculationsChallenge
Comparison & Logical Operators
7 lessons742- 01Comparison Operators - Part 1ChallengeQuizAudio
- 02Comparison Operators - Part 2ChallengeQuizAudio
- 03Logical AND OperatorChallengeQuizAudio
- 04Logical OR OperatorChallengeQuizAudio
- 05Logical NOT OperatorChallengeQuizAudio
- 06Operator Precedence BasicsChallengeQuizAudio
- 07Recap - Making ComparisonsChallenge
Basic Input/Output
5 lessons532- 01Formatted OutputChallengeQuizAudio
- 02Format VerbsChallengeQuizAudio
- 03Printing TypesChallengeQuizAudio
- 04Getting Basic User InputChallengeQuizAudio
- 05Recap - Input and OutputChallenge
Control Flow: Conditionals
10 lessons1069- 01The `if` StatementChallengeQuizAudio
- 02The `else` KeywordChallengeQuizAudio
- 03The `else if` KeywordChallengeQuizAudio
- 04Variable Shadowing in `if`ChallengeQuizAudio
- 05Initializing VariablesChallengeQuizAudio
- 06The `switch` StatementChallengeQuizAudio
- 07Switch with ExpressionsChallengeQuizAudio
- 08Switch without ExpressionChallengeQuizAudio
- 09The `fallthrough` KeywordChallengeQuizAudio
- 10Recap - Making DecisionsChallenge
Control Flow: Loops
7 lessons743- 01What The `for` Loop ExplainedChallengeQuizAudio
- 02For Loop - BasicChallengeQuizAudio
- 03For Loop - Condition OnlyChallengeQuizAudio
- 04The `break` KeywordChallengeQuizAudio
- 05The `continue` KeywordChallengeQuizAudio
- 06Nested LoopsChallengeQuizAudio
- 07Recap - Repeating ActionsChallenge
Functions
9 lessons962- 01Understanding FunctionsChallengeQuizAudio
- 02Declaring a FunctionChallengeQuizAudio
- 03Calling FunctionsChallengeQuizAudio
- 04Function ParametersChallengeQuizAudio
- 05Returning a Single ValueChallengeQuizAudio
- 06Returning Multiple ValuesChallengeQuizAudio
- 07Named Return ValuesChallengeQuizAudio
- 08Function Scope BasicsChallengeQuizAudio
- 09Recap - Creating Reusable CodeChallenge
Pointers
7 lessons644- 01What is a Pointer?QuizAudio
- 02Declaring Pointer VariablesChallengeQuizAudio
- 03The Address-Of OperatorChallengeQuizAudio
- 04Dereferencing PointersChallengeQuizAudio
- 05Using Pointers in FunctionsChallengeQuizAudio
- 06Nil PointersChallengeQuizAudio
- 07Recap - Understanding PointersChallenge
Composite Types: Arrays
7 lessons650- 01Introduction to ArraysQuizAudio
- 02Declaring ArraysChallengeQuizAudio
- 03Initializing ArraysChallengeQuizAudio
- 04Accessing Array ElementsChallengeQuizAudio
- 05Array Length with `len`ChallengeQuizAudio
- 06Iterating Over ArraysChallengeQuizAudio
- 07Multi-dimensional ArraysChallengeQuizAudio
Composite Types: Slices
10 lessons965- 01Introduction to SlicesQuizAudio
- 02Declaring Slice LiteralsChallengeQuizAudio
- 03Creating Slices with `make`ChallengeQuizAudio
- 04Slice Length vs CapacityChallengeQuizAudio
- 05Accessing Slice ElementsChallengeQuizAudio
- 06Appending ElementsChallengeQuizAudio
- 07Slicing Existing Slices/ArraysChallengeQuizAudio
- 08Iterating Over SlicesChallengeQuizAudio
- 09Copying SlicesChallengeQuizAudio
- 10Recap - Dynamic ListsChallenge
Composite Types: Maps
10 lessons965- 01Introduction to MapsQuizAudio
- 02Declaring Map LiteralsChallengeQuizAudio
- 03Creating Maps with `make`ChallengeQuizAudio
- 04Adding and Updating Key-ValueChallengeQuizAudio
- 05Accessing Map ValuesChallengeQuizAudio
- 06Checking for Key ExistenceChallengeQuizAudio
- 07Deleting Map EntriesChallengeQuizAudio
- 08Map LengthChallengeQuizAudio
- 09Iterating Over MapsChallengeQuizAudio
- 10Recap - Key-Value StorageChallenge
Composite Types: Structs
8 lessons854- 01Defining Custom TypesChallengeQuizAudio
- 02Creating Struct InstancesChallengeQuizAudio
- 03Accessing Struct FieldsChallengeQuizAudio
- 04Pointers to StructsChallengeQuizAudio
- 05Initializing StructsChallengeQuizAudio
- 06Embedded StructsChallengeQuizAudio
- 07Anonymous StructsChallengeQuizAudio
- 08Recap - Custom Data StructuresChallenge
Basic Error Handling
8 lessons858- 01The Concept of ErrorsChallengeQuizAudio
- 02The `error` InterfaceChallengeQuizAudio
- 03Functions Returning ErrorsChallengeQuizAudio
- 04Checking for ErrorsChallengeQuizAudio
- 05Creating Simple ErrorsChallengeQuizAudio
- 06Creating Formatted ErrorsChallengeQuizAudio
- 07Basic Error HandlingChallengeQuizAudio
- 08Recap - Handling ProblemsChallenge
Section 2
Logic & Flow
Start sectionStartExpandCollapseMaster advanced Go programming with a focus on data structures and flow control. Learn to work with complex arrays, collections, error handling, and time management.Advanced Control Flow
5 lessons528- 01Switch with `fallthrough`ChallengeQuiz
- 02Breaking from Nested LoopsChallengeQuiz
- 03Continuing a Specific LoopChallengeQuiz
- 04The `goto` StatementChallengeQuiz
- 05Recap - Advanced Loop ControlChallenge
Structs and Methods
6 lessons439- 01Defining Methods on StructsChallengeQuiz
- 02Value ReceiversChallengeQuiz
- 03Pointer ReceiversChallengeQuiz
- 04Choosing ReceiversQuiz
- 05Methods vs FunctionsQuiz
- 06Recap - Struct BehaviorChallenge
Interfaces (The Basics)
8 lessons757- 01What is an Interface?Quiz
- 02Defining an InterfaceChallengeQuiz
- 03Implementing an InterfaceChallengeQuiz
- 04Using Interface TypesChallengeQuiz
- 05Empty InterfaceChallengeQuiz
- 06Type AssertionsChallengeQuiz
- 07Type SwitchChallengeQuiz
- 08Recap - Shapes and BehaviorsChallenge
Project: Simple Task List
Project6 lessons1- 01Project SetupChallenge
- 02Adding a TaskProject
- 03Viewing All TasksProject
- 04Completing a TaskProject
- 05Removing a TaskProject
- 06Putting It All TogetherProject
Maps In-Depth
5 lessons432- 01Maps of StructsChallengeQuiz
- 02Pointers as Map ValuesChallengeQuiz
- 03Testing for Nil MapsChallengeQuiz
- 04Comparing MapsQuiz
- 05Recap - Word Frequency CounterChallenge
Idiomatic Go: Sets
7 lessons648- 01The Set Idiom in GoQuiz
- 02Creating a SetChallengeQuiz
- 03Adding to a SetChallengeQuiz
- 04Checking for MembershipChallengeQuiz
- 05Removing from a SetChallengeQuiz
- 06Iterating Over a SetChallengeQuiz
- 07Recap - Unique UsernamesChallenge
Error Handling In-Depth
7 lessons650- 01Custom Error TypesChallengeQuiz
- 02Wrapping Errors with `%w`ChallengeQuiz
- 03Unwrapping with `errors.Is`ChallengeQuiz
- 04Unwrapping with `errors.As`ChallengeQuiz
- 05Understanding `panic`Quiz
- 06Using `recover`ChallengeQuiz
- 07Recap - Safe DivisionChallenge
Project: Simple Inventory
Project6 lessons1- 01Project OverviewChallenge
- 02Checking StockProject
- 03Adding a New ItemProject
- 04Updating Stock QuantityProject
- 05Generating a ReportProject
- 06Putting It All TogetherProject
Packages and Scope
7 lessons550- 01What is a Package?Quiz
- 02Exported vs UnexportedChallengeQuiz
- 03Creating a Simple PackageChallengeQuiz
- 04Package AliasingChallengeQuiz
- 05The Blank Identifier `_`Quiz
- 06The `init` functionChallengeQuiz
- 07Recap - Building a UtilityChallenge
Working with Time
8 lessons857- 01Getting the Current TimeChallengeQuiz
- 02Creating a Specific TimeChallengeQuiz
- 03Formatting TimeChallengeQuiz
- 04Parsing Time StringsChallengeQuiz
- 05Time DurationChallengeQuiz
- 06Time ArithmeticChallengeQuiz
- 07Sleeping and TickersChallengeQuiz
- 08Recap - Simple TimerChallenge
Final Challenges
3 lessons3- 01Basic Contact ListChallenge
- 02Simple Number ValidatorChallenge
- 03Unique Item CollectorChallenge
Section 3
Object Oriented Programming
Start sectionStartExpandCollapseDiscover how to organize code with classes, objects, and reusable structuresFundamentals of Go OOP
11 lessons1189- 01External FilesChallengeQuiz
- 02Go Workspace & ModulesChallengeQuiz
- 03Packages & ImportsChallengeQuiz
- 04Exported vs Unexported NamesChallengeQuiz
- 05Introduction to OOP in GoChallengeQuiz
- 06Structs as ClassesChallengeQuiz
- 07Defining Methods on StructsChallengeQuiz
- 08Pointer vs Value ReceiversChallengeQuiz
- 09Struct InitializationChallengeQuiz
- 10Constructor FunctionsChallengeQuiz
- 11Recap - Simple CalculatorChallenge
Types & Structs Deep Dive
7 lessons752- 01Basic & Composite TypesChallengeQuiz
- 02Custom Type DefinitionsChallengeQuiz
- 03Struct TagsChallengeQuiz
- 04Anonymous StructsChallengeQuiz
- 05Nested StructsChallengeQuiz
- 06Zero Values & DefaultsChallengeQuiz
- 07Recap - Contact BookChallenge
Pointers & Memory
6 lessons644- 01Pointer Basics in GoChallengeQuiz
- 02Pointers to StructsChallengeQuiz
- 03Pass by Value vs ReferenceChallengeQuiz
- 04The new() FunctionChallengeQuiz
- 05Garbage Collection in GoChallengeQuiz
- 06Recap - Linked List BuilderChallenge
Interfaces
9 lessons969- 01Introduction to InterfacesChallengeQuiz
- 02Implicit ImplementationChallengeQuiz
- 03Interface as ContractChallengeQuiz
- 04Empty Interface (any)ChallengeQuiz
- 05Type AssertionChallengeQuiz
- 06Type SwitchChallengeQuiz
- 07Interface CompositionChallengeQuiz
- 08Stringer & Error InterfacesChallengeQuiz
- 09Recap - Shape CalculatorChallenge
Composition Over Inheritance
7 lessons749- 01Why Go Has No InheritanceChallengeQuiz
- 02Struct Embedding BasicsChallengeQuiz
- 03Method PromotionChallengeQuiz
- 04Embedding Multiple StructsChallengeQuiz
- 05Embedding vs AggregationChallengeQuiz
- 06Shadowing Embedded MethodsChallengeQuiz
- 07Recap - Employee HierarchyChallenge
Polymorphism in Go
6 lessons643- 01Polymorphism via InterfacesChallengeQuiz
- 02Duck Typing in GoChallengeQuiz
- 03Interface Satisfaction RulesChallengeQuiz
- 04Polymorphic CollectionsChallengeQuiz
- 05Dependency InjectionChallengeQuiz
- 06Recap - Payment ProcessorChallenge
Encapsulation
5 lessons536- 01Exported vs Unexported FieldsChallengeQuiz
- 02Package-Level EncapsulationChallengeQuiz
- 03Getter & Setter MethodsChallengeQuiz
- 04Information Hiding in GoChallengeQuiz
- 05Recap - Student RecordsChallenge
Error Handling & OOP
7 lessons754- 01The error InterfaceChallengeQuiz
- 02Custom Error TypesChallengeQuiz
- 03Error Wrapping (fmt.Errorf)ChallengeQuiz
- 04Sentinel ErrorsChallengeQuiz
- 05errors.Is() and errors.As()ChallengeQuiz
- 06Panic, Defer, and RecoverChallengeQuiz
- 07Recap - File ParserChallenge
Concurrency & OOP
8 lessons863- 01Goroutines BasicsChallengeQuiz
- 02Channels & CommunicationChallengeQuiz
- 03Buffered vs Unbuffered ChanChallengeQuiz
- 04Select StatementChallengeQuiz
- 05sync.Mutex & sync.RWMutexChallengeQuiz
- 06sync.WaitGroupChallengeQuiz
- 07Thread-Safe Struct DesignChallengeQuiz
- 08Recap - Worker PoolChallenge
Generics (Go 1.18+)
6 lessons645- 01Introduction to GenericsChallengeQuiz
- 02Type ParametersChallengeQuiz
- 03Type ConstraintsChallengeQuiz
- 04Generic StructsChallengeQuiz
- 05Generic Methods WorkaroundChallengeQuiz
- 06Recap - Generic CollectionChallenge
Standard Library & OOP
6 lessons644- 01io.Reader & io.WriterChallengeQuiz
- 02sort.InterfaceChallengeQuiz
- 03fmt.Stringer InterfaceChallengeQuiz
- 04encoding/json with StructsChallengeQuiz
- 05http.Handler InterfaceChallengeQuiz
- 06Recap - REST API ModelsChallenge
Advanced OOP Concepts
6 lessons655- 01Functional Options PatternChallengeQuiz
- 02Builder Pattern in GoChallengeQuiz
- 03Method ChainingChallengeQuiz
- 04Type Aliases vs DefinitionsChallengeQuiz
- 05Reflection BasicsChallengeQuiz
- 06Code Generation OverviewChallengeQuiz
Design Patterns Part 1
6 lessons651- 01Intro to Design PatternsChallengeQuiz
- 02Singleton PatternChallengeQuiz
- 03Factory PatternChallengeQuiz
- 04Abstract Factory PatternChallengeQuiz
- 05Observer PatternChallengeQuiz
- 06Strategy PatternChallengeQuiz
Design Patterns Part 2
7 lessons764- 01Command PatternChallengeQuiz
- 02Adapter PatternChallengeQuiz
- 03Decorator PatternChallengeQuiz
- 04Template Method PatternChallengeQuiz
- 05State PatternChallengeQuiz
- 06Composite PatternChallengeQuiz
- 07Middleware as DecoratorChallengeQuiz
Project: Library Management
Project7 lessons1- 01Project Overview & StructureChallenge
- 02Book and User StructsProject
- 03Borrowing SystemProject
- 04Search with InterfacesProject
- 05JSON Persistence LayerProject
- 06Admin CLI InterfaceProject
- 07Testing & IntegrationProject
Final Challenges
3 lessons3- 01E-Learning PlatformChallenge
- 02Banking SystemChallenge
- 03Game Character SystemChallenge
GO courses
Hands-on GO courses, free to start in your browser.
Beginner Challenges - Practice Basic Concepts
PopularPut your beginner coding knowledge to test and try to solve this programming challenges, use any language you want, Happy Coding!
Certificate on completion
- 20
- 20
Coding Problems
PopularPut your programming problem solving skills to the test using the exercises with different difficulties in this course. Designed for coders with some prior knowledge of the basic syntax in any programming language.
Certificate on completion
- 32
- 31
Recursion Challenges - Master The Recursive Thinking
Recursion is an important concept in computer science and a very powerful tool in writing algorithms. In this course, you will use recursion to solve challenges from beginner to advanced. In the end, you will ace this topic.
Certificate on completion
- 15
- 15
Coding Problems: Volume 2
Put your programming problem solving skills to the test using the exercises with different difficulties in this course. Designed for coders with some prior knowledge of the basic syntax in any programming language. This course is an extension of the first Coding Problems
Certificate on completion
- 25
- 24
Golang Challenges - Level 1
A set of challenges aimed at improving your thinking and getting more familiar with Golang and its beautiful syntax. The challenges focus on arrays, slices, loops, and conditions.
Certificate on completion
- 24
Stack - Data Structures Series #1
In this course, you will learn about the Stack data structure, create a Stack from zero using your preferred language, and practice coding challenges with it!
- 13
- 6
- 1
Why learn Go with Coddy
- Write and run real Go code in your browser. No Go toolchain install, no GOPATH to configure. Each lesson compiles your Go program server-side and shows the output instantly.
- Idiomatic Go: packages, structs, slices and maps, interfaces, error handling, goroutines, channels. The Go patterns you'd actually use to build backends and CLIs.
- AI hints help you debug Go code and untangle goroutine and channel bugs without spoiling the answer, so the concurrency model clicks instead of confusing you.
- Free Golang certificate when you finish. A credible signal for backend, cloud-infrastructure, and DevOps roles where Go fluency is increasingly expected.