Journey
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.
20,998+ 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
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.
Frequently asked questions about learning Go
Is Go hard to learn?
Go is deliberately one of the simpler modern languages. Small spec, no inheritance, no generics-by-default complexity, and a strong standard library. Most beginners reach their first working Go program in the first hour and start writing goroutines within a couple of weeks.
What is Go (Golang) used for?
Backend services, cloud infrastructure, CLIs, and DevOps tooling. Docker, Kubernetes, Terraform, and a large share of cloud-native infrastructure are written in Go. The language is built around fast compilation, easy concurrency, and producing a single static binary, which makes it a natural fit for servers and command-line tools.
How long does it take to learn Go?
Go basics — syntax, functions, structs, slices, maps — take one to two weeks of daily practice. Comfortable use of interfaces, goroutines, and channels usually takes another two to six weeks. Reaching production proficiency on Go services is then mostly driven by working on a real codebase.
Should I learn Go or Python?
Pick by goal. Python is faster to feel productive in for data work, scripting, and AI. Go shines for backend services, infrastructure tooling, and anything where you want a fast, statically-typed binary with built-in concurrency. The two complement each other well — many backend teams use both.
Can I learn Golang online for free?
Yes. The interactive Go course is free — full lessons, coding exercises, quizzes, and a certificate. The Go compiler runs server-side so you don't need to install Go locally or set up GOPATH to start coding.
Do I get a certificate after the Go course?
Yes. Finishing the Go course gives you a free certificate of completion you can add to your resume or share on LinkedIn. A verifiable proof point alongside any Go projects or GitHub repos you've built.