Go Programming – Golang Course with Bonus Projects

preview_player
Показать описание
Learn the Go programming language in this full course for beginners. You'll practice writing performant, idiomatic Go with these hands-on lessons and challenges.

✏️ Course created by @bootdotdev

Documentation used:

⭐️ Contents ⭐️
(0:00:00) Intro
(0:03:17) Ch 1. Why write Go?
(0:27:39) Ch 2. Variables
(0:51:11) Ch 3. Functions
(1:16:58) Ch 4. Structs
(1:34:36) Ch 5. Interfaces
(2:00:26) Ch 6. Errors
(2:22:01) Ch 7. Loops
(2:48:21) Ch 8. Slices
(3:39:54) Ch 9. Maps
(4:06:19) Ch 10. Advanced functions
(4:31:03) Ch 11. Pointers
(4:48:02) Ch 12. Local development
(5:31:43) Ch 13. Channels & concurrency
(6:07:38) Ch 14. Mutexes
(6:30:56) Ch 15. Generics
(6:38:38) Ch 16. Quiz
(6:43:13) P1. RSS aggregator project
(6:53:43) P2. Chi router
(7:11:37) P3. Postgres database
(7:39:10) P4. Authentication w/ API keys
(8:18:28) P5. Many to many relationships
(8:39:13) P6. Aggregation worker
(9:05:28) P7. Viewing blog posts

🎉 Thanks to our Champion and Sponsor supporters:
👾 davthecoder
👾 jedi-or-sith
👾 南宮千影
👾 Agustín Kussrow
👾 Nattira Maneerat
👾 Heather Wcislo
👾 Serhiy Kalinets
👾 Justin Hual
👾 Otis Morgan

--

Рекомендации по теме
Комментарии
Автор

I hope this course is helpful! It was a ton of fun to create. I (Lane) can't wait to connect with you all on the Discord and on our YouTube channel as well

bootdotdev
Автор

Even after over 4 years as a Go developer, this is refreshingly worth my time. You just got yourself a new subscriber Boot dev

ehiojehenryerabor
Автор

Today I finished the course, I've learned so much from it and absolutely loved it. Thank you very much for clear and comprehensive tutorial

hamidosouli
Автор

It's very scary because for the third time in a row you dropped exactly the topic I'm just interested in. A while ago when I started learning Angular, the next day your video dropped. Same thing with typescript before that. And now, I just returned to Go because of Google I/O yesterday and here you are.

ferris
Автор

I know this is meant as an introduction only, but it would be good to mention things like NOT depending on a delay such as the code when sending and receiving email via go routines. It's better to manage the order of operations in more concrete way. Not mentioning this can lead people to believe that that (adding or depending on delays) is a good way to code, and it rarely is. Otherwise, this is a great video - keep up the great work!

zobkiw
Автор

Right now i have no money but i love you guys for the work you do but one i make some i will donate to you guys so that i can continue watching your videos ❤

AJAYRAJ-tmjk
Автор

Great course to quickly ramp up on Go basics.

I watched fast fowarding and got through it in a couple days with enough knowledge to start building some Go tuis. Thanks!

mxc_clips
Автор

Thanks for a great course!

Small correction for the timestamps:
Generic starts at 06:18:18 and not 06:31:17

JohnnyTime
Автор

This course is fantastic! Something I really liked about it is that your pronounciation is clear even for us that are not native english speakers.

arturoespinosa
Автор

I loved how we're cutting out the middle man (ORM's) and writing straight SQL.

khanriza
Автор

🎯 Key Takeaways for quick navigation:

00:00 🎓 This is a comprehensive Go programming course for beginners, covering key concepts and techniques for writing performant, idiomatic Go code.
00:41 🚀 Go has been rapidly growing in popularity due to its speed, lightweight nature, excellent developer experience, and ease of learning.
06:39 👨‍💻 The course involves hands-on coding challenges to build a production-ready back-end server in Go.
22:21 🔄 Performance is measured in both execution speed (CPU cycles) and memory consumption (RAM usage) to assess a programming language or application's efficiency.
25:47 📊 Go exhibits better memory efficiency compared to Java and is more memory-efficient than Rust as well. In an experiment measuring memory consumption, Go used 100 times less memory than Java when idle.
27:55 🔢 Go has various numeric types, including integers (int and uint), floats (float32 and float64), and complex numbers. The size of a type, like float64, indicates it has 64 bits.
33:25 🔢 If you need to work with fractions or floating-point numbers, use `float64` rather than `int` to store values with fractional parts accurately.
35:21 🏋️‍♀️ If performance is a primary concern and you need to optimize memory usage, consider using specific types like `int8`, `int16`, etc. Otherwise, stick to the default types for better readability and maintainability.
37:11 ❓ You should not use a default type when a specific size will work, and performance and memory are critical factors.
40:25 🛠️ Constants in Go are immutable values known or computed at compile time. Constants can be used for calculations, but their values must be determined at the time of compilation.
49:02 📉 When initializing a variable in an `if` block, it limits the scope of that variable to only be accessible within that block.
51:05 📝 Functions in Go break up code into individual units that are easier to reason about, and their signatures describe their inputs and outputs.
52:26 🔄 Go passes variables by value, not by reference, and it does not allow unused variables.
01:09:10 🧹 Using named return values to improve code readability and document the purpose of return values in functions.
01:34:39 🛠️ Interfaces in Go are collections of method signatures that enable polymorphism, allowing different types to be treated as the same interface if they implement the methods.
01:35:59 🎈 Multiple types can implement the same interface, allowing for flexible and extensible design in Go programs.
02:00:10 📛 Understand that interfaces in Go are not classes and do not define underlying behavior or hierarchies like traditional object-oriented classes.
02:00:50 🧪 Go's error handling is unique and does not use try-catch blocks like JavaScript or other languages.
02:04:29 🔎 Go's error handling using interfaces allows developers to create custom error types and provide more structured information about the error, improving error handling and debugging capabilities.
02:24:57 🤖 The speaker discusses a function that calculates the cost of sending text messages based on a given formula.
02:26:54 🤖 The speaker creates a function `maxMessages` to find the maximum number of messages to send under a cost threshold using a specific formula.
02:29:31 🤖 Go does not have a dedicated `while` loop; instead, a `for` loop with only a condition serves as a `while` loop in Go.
02:30:53 🤖 The assignment involves writing a function that calculates the number of messages that can be sent based on a cost multiplier and a maximum cost.
02:38:18 🤖 The assignment focuses on implementing the classic FizzBuzz game, printing numbers with specific substitutions for multiples of three and five.
02:51:09 🔄 Slices in Go provide a flexible view into an array and are typically used instead of arrays, as they can dynamically grow and are more developer-friendly.
02:52:14 💻 The assignment involves implementing a function to handle different plans for text message retries, where Pro users get unlimited retries and free users get limited retries.
03:03:47 ⚠️ Slices dynamically expand by copying data into a new memory location when reaching capacity. Pre-allocating slices can enhance performance by minimizing copying.
03:08:24 📊 The assignment involves implementing a function to calculate costs based on message lengths and store them in a slice of float64.
03:10:08 📏 Understanding the difference between "length" (current size of a slice) and "capacity" (maximum size before reallocation) is essential when working with slices in Go.
03:19:47 🔄 Use the `for range` loop syntax to iterate over elements in a slice easily.
[03:40:30 URL] 🗺️ Maps can be declared upfront using a colon syntax for keys and values, providing a more efficient way to set key-value pairs in a map.
[03:41:12 URL] ⚙️ Using maps can speed up data lookups significantly compared to searching through a slice, making code more efficient.
[03:41:40 URL] 🖋️ Creating a map of name to user structs can be achieved by looping through two slices, matching the names to phone numbers and adding them to the map.
[03:42:52 URL] 🔍 When using maps as keys, the type must be comparable (strings, booleans, numbers), and not slices, maps, or functions.
[03:50:41 URL] 🚫 Maps cannot have duplicate keys; they are unique and can have at most one value associated with each key.
04:03:47 📝 Understanding nested maps and how to initialize them in Go.
04:06:29 📝 Explaining first-class and higher-order functions in Go.
04:13:08 📝 Understanding closures and how they reference variables in Go.
04:14:11 📝 Utilizing defer keyword for cleanup and resource management in Go.
04:52:32 📦 Packages in Go are organized at the directory level, and packages live on GitHub repositories.
05:01:38 🔗 Import paths in Go serve as a prefix for nested packages within the module.
05:08:03 🏃‍♂️ Use "go run" to quickly run small scripts or programs without producing a compiled binary.
05:11:44 📥 "Go install" compiles and installs the program globally, making it accessible from anywhere on your machine.
05:16:48 💡 To export functions in a package, capitalize their first letter in Go.
05:17:56 🏭 The output of "go build" in a library package is not an executable program; it's silently saved to the local build cache for later use.
05:19:21 🗂️ Go package convention: The package name and the directory name should match, but it's not a strict requirement.
05:27:59 📅 Demonstrating synchronous/sequential programming and how it runs one instruction at a time.
05:38:33 🔄 Writing concurrent code in Go using the "go" keyword to spawn new goroutines for parallel execution.
05:39:30 💼 Go routines allow concurrent execution in Go, allowing functions to run in the background.
05:54:38 🤖 Channels should be closed by the sending routine to indicate no more data will be sent.
06:45:14 📝 Project Introduction: Building a backend server in Go to aggregate data from RSS feeds, requiring basic SQL knowledge, a text editor, command line, Go language, and an HTTP client.
06:52:13 📝 When using the package "github.com/joho/go.env" to load environment variables from a .env file, it might not overwrite the current session environment. It's necessary to restart the shell session to see the changes.
06:59:39 📝 CORS (Cross-Origin Resource Sharing) configuration can be added to the router to allow requests to be made from browsers to the server. It involves setting up headers to specify allowed methods, origins, and headers.
07:20:55 📁 Set up SQLC to generate type-safe Go code for SQL queries, reducing manual work and potential errors.
07:40:30 🤖 The choice between VARCHAR and TEXT data types depends on the desired length and characteristics of the data. VARCHAR(64) is used to store unique API keys of a fixed length.
08:02:10 🤖 Middleware functions can take advantage of closures to access variables from the outer scope, allowing them to handle additional logic before calling the original handler function.
08:05:27 🏭 The speaker defines the parameters required to create a feed object and encounters and resolves a bug related to UUID types in the database schema.
08:08:22 🔨 The speaker creates a new model called "feed" to represent the structure of a feed and discusses the benefits of using custom models for JSON API responses.
08:10:17 🧪 The speaker tests the new "Handler create feed" endpoint using a tool called Thunder Client and successfully creates a new feed.
08:11:17 📝 The speaker implements a new endpoint "Handler get feeds" to retrieve all feeds in the database, providing users with an aggregated view of feeds they are interested in.
08:22:02 💻 The speaker implements the "Handler create feed follow" endpoint, allowing users to follow specific feeds.
08:35 📌 The Chi router in Go (Golang) can grab dynamic values from the request path using the `URLParam` function.
08:39 📌 The server has completed the CRUD section of the API, but it still needs to implement the part that fetches posts from different RSS feeds and updates the database accordingly.
08:54 📌 The server implements a background scraper function to fetch RSS feeds concurrently using goroutines and a ticker. It fetches multiple feeds simultaneously to improve efficiency.
09:04:04 📝 With a concurrency setting of 10, multiple feeds can be fetched simultaneously, but duplicates should be avoided when saving posts to the database.

Made with HARPA AI

anuvratnehra
Автор

I just reached chapter 6 but I can already say I've been loving it, I am learning so much and the clear division between chapters make it easier to catch up the next day

vinimaciel
Автор

Absolutely loved it! I followed it from start to finish. I would loved a bit more structure around the files on the final project, but overall the way he explains the topics it's very clear

Dgiulian
Автор

I havent watched the whole video yet but i wanted to say i appreciate the time you took to create-record and the way you explain these concepts.Thank you

sampapap
Автор

Thank you for covering basic to intermediate go. I've gone through multiple channels but all they covered was basic. Also the examples explained here gives clear idea at which scenario one can use go features

maniaharshil
Автор

It took me 3 hours to complete 40 min
Thank you Freecodecamp you guys are awesome.

prashlovessamosa
Автор

I mean How? Last night before went to bed, was searching for Go and Now its here!!! I mean thanks and lots of love

iamsupriyo
Автор

One of the most useful golang videos I've ever seen on youtube! Great content

temperkan
Автор

I think that is the most preferred and well assertive way to learn a program language. Well done!

nero
Автор

This course was an amazing intro to Go. Looking forward to building more projects with it.

techbytes