If you want to become a better Go engineer (and generally a more pragmatic engineer), this bootcamp is for you. This is my value proposition to you, but you will have to study, read, and write a lot of code (and documentation). If you’re up for this, then read on!
I hear, and I forget. I see, and I remember. I do, and I understand. - Confucius
Table of ContentsPre-requisitesWhy yet another bootcamp?How to make the most out of this bootcamp?How is this bootcamp organized?Why make this bootcamp public?Is this free?Show me the exercises!Go ResourcesSome other good materialInteresting Go projects to exploreWho built this bootcamp?
I assume you’re a developer who writes code in some programming language (Java, Ruby, C, Go, PHP - no haters here) and has built some API and CLI-based applications. So familiarity with REST APIs and Relational DB design is expected.
There are already a bunch of Go bootcamps/roadmaps available. Why write another one? I didn’t find good exercise-oriented bootcamps (except Gophercises) for Go. I used to actively follow JustForFunc, but it hasn’t been updated for a while. Also, I wanted to create examples with incremental complexity that will help budding Gophers cover all concepts, from building CLI apps to building real-world projects. Hence this bootcamp.
This is an exercise-oriented bootcamp. This means you’ll learn by solving problems that increase in difficulty level as you progress. You’ll get almost no value if you just skim through the bootcamp material and don’t solve these exercises yourself. Don’t say I didn’t warn you!
This is also a self-paced bootcamp, not a cohort-based course(CBC). I may run it as a CBC, but in the future, not right now.
Currently, all the content is text-based, with no videos. In the future, I may add some videos, especially for difficult problems, if it makes sense.
- In the first week - you’ll pick up Go syntax and language basics
- Next couple of weeks - build basic CLI apps with test cases and
- Later - build fully featured REST APIs or async worker systems with relational DB, queues, cache, etc.
Most bootcamps teach you “hello world” style content - with videos, guided code examples, and whatnot. Not this one! This bootcamp starts with basics but increases in complexity pretty fast. Consider this “Learning Go - the hard way” if you want. Why? Because I want to give you a taste of real-world production-grade stuff, not just a sandbox and hello-world style content.
I’d suggest forming a study group with a few folks, solving the exercises, comparing your solution, and reviewing each other’s code and approach. If you don’t have a study group, you can apply at One2N - we are always hiring and learning. 😃
At One2N, we run this bootcamp internally for every engineer who joins our team. You solve these problems, and we help with feedback, suggestions, and improvements to your solutions. Engineers typically complete the bootcamp within a month or two from joining.
This bootcamp consists mainly of exercises that you solve in Go. For each of the exercises, you’ll know the following details:
- Difficult level (beginner, intermediate, or advanced)
- Time to be allotted to solving the exercise
- What you’ll learn by solving this exercise
- How to evaluate your solution
- i.e., approaches, patterns, tools, library, etc., that you should have used when solving the exercise in an idiomatic way
- if we were doing the code review in person, these would be PR comments by a senior engineer on your codebase
- Actual solution with tests, if applicable. (use this only for reference; you’ll literary get zero value from this bootcamp if you just jump straight to the solution
- Resources to help you solve the problem and research more about that specific problem.
The purpose of putting this material out in the open is two-fold.
- Giving back to the community and creating production-grade content around learning Go
- Seek more collaboration and get feedback to further improve this bootcamp
Tell me, and I forget, teach me, and I remember, involve me, and I learn.
Yes, you are the product, so you pay for this bootcamp with your time and self-study effort! 😀 Seriously, form that study group and solve these problems. You’ll learn a lot.
Enough preamble! Here are some projects and exercises that you can solve in Go.Go Projects
Here’s some learning material (mostly free, some behind a paywall) that I have found super useful. I have gone through these myself (often multiple times), and I can vouch for their quality. See if you find these useful to you. (Disclaimer: None of these are sponsored links, I am only recommending them because I found these worth my time).
- The Go Programming Language (must-read book for picking up Go’s syntax) - https://learning.oreilly.com/library/view/the-go-programming/9780134190570/
- Effective Go (Effective Java style, a must-read for every Go developer) - https://go.dev/doc/effective_go
- Learn Go by solving exercises - https://gophercises.com/
- JustForFunc (Learn Go with Francesc Campoy by watching videos. Must watch videos related to Context package, CLI tools with Cobra, Unit testing HTTP servers etc.) - https://www.youtube.com/c/justforfunc
- Go Proverbs (advanced, related to writing idiomatic Go) https://go-proverbs.github.io/
- Learn go with tests (a really good self-paced in-depth tutorial about learning Go using TDD) https://quii.gitbook.io/learn-go-with-tests/
- Notes on writing clean code in Go (must read for all levels) - https://github.com/Pungyeon/clean-go-article
- How to organize Go projects? Project layout in Go - https://github.com/golang-standards/project-layout
- Ultimate Go Programming - By William Kennedy (Great way to understand philosophy of Go, learn to write idiomatic Go code) https://learning.oreilly.com/videos/ultimate-go-programming/9780135261651/
- Writing high-performance Go code (Do you really have to? Then read this. A bit advanced, not for beginners.) https://github.com/dgryski/go-perfbook
These are links that I think could be useful to you, but I haven’t personally vetted their quality.
- A curated list of awesome Go frameworks, libraries and software https://github.com/avelino/awesome-go
- https://thewhitetulip.gitbook.io/bo/ Good book to learn Go web development.
- Testing with Go (paid course, so check whether it’s worth your money) - https://testwithgo.com/
- Roadmap to becoming a Go developer - https://github.com/Alikhll/golang-developer-roadmap
- 100 Go mistakes to avoid - https://github.com/teivah/100-go-mistakes
- Building Microservices in Go - https://github.com/thangchung/go-coffeeshop
- Want to learn how higher-order functions, such as map, filter, reduce, flatmap, etc, can be implemented in Go using generics? Explore the code and tests in https://github.com/repeale/fp-go library. (I haven’t used this library in production, but I found it useful to understand how generics could be used in practice.)
- If you like fp-go above, you will love go-streams (warning: it’s a bit advanced code) - https://github.com/reugn/go-streams. It implements the basic building blocks of any streaming library - Source, Flow and Sink. Look at these beautiful interfaces - Inlet, Outlet, Source, Flow, Sink and how these are composed. (I haven’t used this library in production, but I highly encourage you to explore the library code, especially the flow package). You’ll learn much about data pipelines, transformations, and streaming data handling.
- See how good abstractions are created for writing CLI programs in Go using the script library - https://github.com/bitfield/script. Look at the Pipe abstraction and how it is used to implement commands like echo, exec, jq, etc. Each command returns a *Pipe, thus allowing us to chain function calls like
script.File("test.txt").Match("Error").CountLines(). There’s a lot to learn from this library code.
- Want to know what middlewares are in Go and how to implement them? Explore https://github.com/urfave/negroni. It has a collection of middleware implemented in Go in an idiomatic style. You’ll also learn how to test these middlewares. Some examples are:
Chinmay Naik (follow him on LinkedIn and Twitter) with help from most of the other One2N engineers. If you like this bootcamp, you will love our playbook - One2N Playbook. This bootcamp and the playbook are painstakingly handcrafted by Chinmay without any help from ChatGPT. (because writing = thinking and writing begets clarity)