Introduction to Variables Example: Path Separator When to use a short declaration? Let's convert a value! Learn the basics of os.Args Naming Things: Recommendations What is a Raw String Literal? How to get the length of a utf-8 string? Example: Banger: Yell it back! Constants and iota Println vs Printf What is an Escape Sequence? How to print using Printf? The verbs can be type-safe too! If Statement Else and Else If Tiny Challenge: Validate a single user Solution: Validate a single user Tiny Challenge: Validate multiple users Solution: Validate multiple users What is a nil value? What is an error value? Error handling example Challenge: Feet to Meter Solution: Feet to Meter What is a Simple Statement? Scopes of simple statements Famous Shadowing Gotcha Learn the Switch Statement Basics What is a default clause? Use multiple values in case conditions Use bool expressions in case conditions How does the fallthrough statement work? What is a short switch? Tiny Challenge: Parts of a Day Solution: Parts of a Day If vs Switch: Which one to use? There is only one loop statement in Go How to break from a loop? How to continue a loop? (+BONUS: Debugging) Create a multiplication table How to loop over a slice? For Range: Learn the easy way! Randomization and Go Seed the randomizer with time Write the Game Logic Build the Word Finder Program Labeled Break and Continue Break from a Switch using Labels Yes there is a "goto" statement in Go Introduction and Roadmap What is an array in Go? Let's create an array Learn the gotcha when using a for range on arrays What is a composite literal? Refactor the Hipster's Love Bookstore to array literals Tiny Challenge #1: Moodly Can you compare array values? Can you assign an array value to another one? How to use multi-dimensional arrays? Tiny Challenge #2: Moodly Learn the rarely known feature of Go: The Keyed Elements Learn the relation between composite and unnamed types Recap: Arrays Challenge: Retro Led Clock Let's print the digits Let's print the clock It's time to animate the clock! Introduction and Roadmap Learn the differences between slices and arrays Can you compare a slice to another one? Create a unique number generator Append: Let's grow a slice! Slicing: Let's cut that slice! How to create pagination using slices? (+ Sprintf) What is a Backing Array? What's a slice header? What does a slice header look like in the actual Go runtime code? What is the capacity of a slice? Extend a slice using its capacity When does the append function create a new backing array? Animate: When the backing array of a slice grows? Full Slice Expressions: Limit the capacity of a slice make(): Preallocate the backing array copy(): Copy elements between slices How to use multi-dimensional slices? Fetch the Files Write to a file Optimize! Challenge Step #1: Create and Draw the Board Step #2: Optimize by adding a Buffer Step #3: Animate the Ball Introduction and Roadmap Let's learn the basics of bytes, runes and strings Let's write a character-set program Let's convert, index, and slice bytes, runes and strings How can you decode a string? String Header: Why strings are immutable? Recap: Strings Revisited Challenge Detect the link patterns Mask the links Let's build a Unicode text wrapper Create an English to Turkish dictionary Populate the dictionary Map Internals: How maps work behind the scenes? Scan user input using bufio.Scanner Use maps as sets Create a Log Parser using maps and bufio.Scanner What is a struct? Let's create a struct! When can you compare struct values? Go OOP: Struct Embedding Rewrite: Log Parser to Structs Encode values to JSON Decode values from JSON Learn the function basics Confine variables to a function Rewrite: Log Parser using functions Learn the Pass By Value Semantics What is a pointer? Learn the pointer mechanics Learn how to work with pointers to composite types Rewrite the Log Parser using Pointers Pointers or Values? Be Consistent Methods: Enhance types with additional behavior Pointer Receivers: Change the received value Non-Structs: Attach methods to almost any type Interfaces: Be dynamic! Type Assertion: Extract the dynamic value! Empty Interface: Represent any type of value Type Switch: Detect and extract multiple values Promoted Methods: Let's make a little bit of refactoring Don't interface everything! Stringer: Grant a type the ability to represent itself as a string Sorter: Let a type know how to sort itself Marshalers: Customize JSON encoding and decoding of a type