- 01Getting Started
- 02Your First Output (fmt.Println)
- 03Working with Variables
- 04Conditionals (if statements)
- 05Loops (for statements)
- 06Writing a Function
- 07Slices (Arrays)
- 08Loops (a for statement in place of while)
- 09Structs (an Object-Oriented Style)
- 10Error Handling
- 11Sorting a Slice
- 12Recursive Functions
- 13Using the Standard Library
- 14The switch Statement
- 15Anonymous Functions (Closures)
- 16Reusing Code with Struct Embedding
- 17Writing Comments
- 18Logical Operators (&&, ||, !)
- 19Constants (const)
- 20Splitting and Joining Strings (Split, Join)
- 21Writing nil-Safe Code (Checking a Pointer for nil)
- 22Searching a Slice
- 23Transforming a Slice (a map-like Operation)
- 24Two-Dimensional Slices (Tabular Data)
- 25Writing a Custom Error Type
- 26Variadic Parameters (...)
- 27Representing a Set with a Map (Duplicate-Free Data)
- 28Testing with Your Own assert Function
- 29Higher-Order Functions (Passing a Function as an Argument)
- 30Stacks and Queues (Basic Data Structures)
- 31Type Conversion (Casting) Basics
- 32Intro to Regular Expressions (Pattern Matching)
- 33The Binary Search Algorithm
- 34Building a Caesar Cipher (a Character-Shifting Cipher)
- 35Understanding How Bubble Sort Works
- 36Building and Displaying Dates (Basic Year/Month/Day Operations)
- 37Writing Multiple Test Cases Together
- 38Speeding Up Calculations with Memoization (Caching)
- 39Normalizing Strings (TrimSpace, Unifying Case)
- 40Shallow Copy vs. Deep Copy
- 41Enum Basics (iota)
- 42Flattening a Slice
- 43Reversing a String and Checking for Palindromes
- 44Pairing Up Two Slices (the zip operation)
- 45Rounding Numbers (Floor, Ceil, Round)
- 46Multi-Line Strings (Backquotes)
- 47Functions That Return Multiple Values
- 48Finding the GCD and LCM (the Euclidean Algorithm)
- 49Formatting Numbers (Padding Digits, Decimal Places)
- 50Cleanup Logic with defer
- 51Writing Generic Functions
- 52File Reading and Writing Basics
- 53Generating Random Numbers
- 54Bitwise Operators (AND, OR, XOR, shifts)
- 55Reading Command-Line Arguments
- 56Waiting for a Fixed Amount of Time (time.Sleep)
- 57Watch Out for Floating-Point Rounding Errors
- 58Reading from Standard Input
- 59FizzBuzz (the Classic Practice Problem)
- 60Checking Whether a Number Is Prime
- 61Set Operations with Maps (Union, Intersection, Difference)
- 62Converting Number Bases (Binary, Hex)
- 63Checking Balanced Parentheses (an Application of Stacks)
- 64Checking Whether Two Words Are Anagrams
- 65Checking Whether a Year Is a Leap Year
- 66Converting Temperature (Celsius to Fahrenheit)
- 67Prime Factorization
- 68[Applied] Build a Simple Inventory Management Tool
Structs (an Object-Oriented Style)
In this lesson you will learn an object-oriented style using Go structs, and understand how to keep data and behaviour together. This is for anyone searching for "Go structs how to use".
Go has no classes. Instead you combine a struct with functions (methods) bound to it to achieve something similar. Picture defining "the data for an animal" and "the behaviour of an animal making a sound" separately, then tying them together.
The sample code gives the Animal struct the fields Name and Sound, and builds a message in the method func (a Animal) Speak() string. The (a Animal) part is called the receiver and states which struct the method is bound to.
A common stumbling block for beginners is how to write that receiver. Without understanding the difference between a value receiver and a pointer receiver, it is easy to change the struct inside a method and find the change was never reflected.
In real-world development, being able to design in an object-oriented way through this simple mechanism, without classes, is regarded as one of the defining features of Go.
๐งช This site can't compile or run Go directly, so it checks on the spot whether what you typed matches the reference code (scoring happens entirely in your browser โ nothing is sent anywhere).
