232 lines
8.1 KiB
Markdown
232 lines
8.1 KiB
Markdown
---
|
|
title: "Diving into Go: A Five-Week Intro"
|
|
date: 2014-04-25T00:00:00+00:00
|
|
draft: false
|
|
canonical_url: https://www.viget.com/articles/diving-into-go-a-five-week-intro/
|
|
---
|
|
|
|
One of my favorite parts of being a developer here at Viget is our
|
|
[developer book club](https://viget.com/extend/confident-ruby-a-review).
|
|
We've read [some](http://www.confidentruby.com/)
|
|
[fantastic](http://www.poodr.com/)
|
|
[books](http://martinfowler.com/books/nosql.html), but for our most
|
|
recent go-round, we decided to try something different. A few of us have
|
|
been interested in the [Go programming language](https://golang.org/)
|
|
for some time, so we decided to combine two free online texts, [*An
|
|
Introduction to Programming in Go*](http://www.golang-book.com/books/intro/) and
|
|
[*Go By Example*](https://gobyexample.com/), plus a few other resources,
|
|
into a short introduction to the language.
|
|
[Chris](https://viget.com/about/team/cjones) and
|
|
[Ryan](https://viget.com/about/team/rfoster) put together a curriculum
|
|
that I thought was too good not to share with the internet at large.
|
|
|
|
## Week 1
|
|
|
|
Chapter 1: [Getting Started](http://www.golang-book.com/books/intro/1)
|
|
|
|
- Files and Folders
|
|
- The Terminal
|
|
- Text Editors
|
|
- Go Tools
|
|
- **Go By Example**
|
|
- [Hello World](https://gobyexample.com/hello-world)
|
|
|
|
Chapter 2: [Your First Program](http://www.golang-book.com/books/intro/2)
|
|
|
|
- How to Read a Go Program
|
|
|
|
Chapter 3: [Types](http://www.golang-book.com/books/intro/3)
|
|
|
|
- Numbers
|
|
- Strings
|
|
- Booleans
|
|
- **Go By Example**
|
|
- [Values](https://gobyexample.com/values)
|
|
- [Random Numbers](https://gobyexample.com/random-numbers)
|
|
- [String Functions](https://gobyexample.com/string-functions)
|
|
- [String Formatting](https://gobyexample.com/string-formatting)
|
|
- [Regular
|
|
Expressions](https://gobyexample.com/regular-expressions)
|
|
|
|
Chapter 4: [Variables](http://www.golang-book.com/books/intro/4)
|
|
|
|
- How to Name a Variable
|
|
- Scope
|
|
- Constants
|
|
- Defining Multiple Variables
|
|
- An Example Program
|
|
- **Go By Example**
|
|
- [Variables](https://gobyexample.com/variables)
|
|
- [Constants](https://gobyexample.com/constants)
|
|
- [Number Parsing](https://gobyexample.com/number-parsing)
|
|
- [Time](https://gobyexample.com/time)
|
|
- [Epoch](https://gobyexample.com/epoch)
|
|
- [Time Formatting /
|
|
Parsing](https://gobyexample.com/time-formatting-parsing)
|
|
|
|
Chapter 5: [Control Structures](http://www.golang-book.com/books/intro/5)
|
|
|
|
- For
|
|
- If
|
|
- Switch
|
|
- **Go By Example**
|
|
- [For](https://gobyexample.com/for)
|
|
- [If/Else](https://gobyexample.com/if-else)
|
|
- [Switch](https://gobyexample.com/switch)
|
|
- [Line Filters](https://gobyexample.com/line-filters)
|
|
|
|
Chapter 6: [Arrays, Slices and Maps](http://www.golang-book.com/books/intro/6)
|
|
|
|
- Arrays
|
|
- Slices
|
|
- Maps
|
|
- **Go By Example**
|
|
- [Arrays](https://gobyexample.com/arrays)
|
|
- [Slices](https://gobyexample.com/slices)
|
|
- [Maps](https://gobyexample.com/maps)
|
|
- [Range](https://gobyexample.com/range)
|
|
- **Blog Posts**
|
|
- [Go Slices: usage and
|
|
internals](https://blog.golang.org/go-slices-usage-and-internals)
|
|
- [Arrays, Slices (and strings): The mechanics of
|
|
'append'](https://blog.golang.org/slices)
|
|
|
|
## Week 2
|
|
|
|
Chapter 7: [Functions](http://www.golang-book.com/books/intro/7)
|
|
|
|
- Your Second Function
|
|
- Returning Multiple Values
|
|
- Variadic Functions
|
|
- Closure
|
|
- Recursion
|
|
- Defer, Panic & Recover
|
|
- **Go By Example**
|
|
- [Functions](https://gobyexample.com/functions)
|
|
- [Multiple Return
|
|
Values](https://gobyexample.com/multiple-return-values)
|
|
- [Variadic Functions](https://gobyexample.com/variadic-functions)
|
|
- [Closures](https://gobyexample.com/closures)
|
|
- [Recursion](https://gobyexample.com/recursion)
|
|
- [Panic](https://gobyexample.com/panic)
|
|
- [Defer](https://gobyexample.com/defer)
|
|
- [Collection
|
|
Functions](https://gobyexample.com/collection-functions)
|
|
|
|
Chapter 8: [Pointers](http://www.golang-book.com/books/intro/8)
|
|
|
|
- The \* and & operators
|
|
- new
|
|
- **Go By Example**
|
|
- [Pointers](https://gobyexample.com/pointers)
|
|
- [Reading Files](https://gobyexample.com/reading-files)
|
|
- [Writing Files](https://gobyexample.com/writing-files)
|
|
|
|
## Week 3
|
|
|
|
Chapter 9: [Structs and Interfaces](http://www.golang-book.com/books/intro/9)
|
|
|
|
- Structs
|
|
- Methods
|
|
- Interfaces
|
|
- **Go By Example**
|
|
- [Structs](https://gobyexample.com/structs)
|
|
- [Methods](https://gobyexample.com/methods)
|
|
- [Interfaces](https://gobyexample.com/interfaces)
|
|
- [Errors](https://gobyexample.com/errors)
|
|
- [JSON](https://gobyexample.com/json)
|
|
|
|
Chapter 10: [Concurrency](http://www.golang-book.com/books/intro/10)
|
|
|
|
- Goroutines
|
|
- Channels
|
|
- **Go By Example**
|
|
- [Goroutines](https://gobyexample.com/goroutines)
|
|
- [Channels](https://gobyexample.com/channels)
|
|
- [Channel Buffering](https://gobyexample.com/channel-buffering)
|
|
- [Channel
|
|
Synchronization](https://gobyexample.com/channel-synchronization)
|
|
- [Channel Directions](https://gobyexample.com/channel-directions)
|
|
- [Select](https://gobyexample.com/select)
|
|
- [Timeouts](https://gobyexample.com/timeouts)
|
|
- [Non-Blocking Channel
|
|
Operations](https://gobyexample.com/non-blocking-channel-operations)
|
|
- [Closing Channels](https://gobyexample.com/closing-channels)
|
|
- [Range over
|
|
Channels](https://gobyexample.com/range-over-channels)
|
|
- [Timers](https://gobyexample.com/timers)
|
|
- [Tickers](https://gobyexample.com/tickers)
|
|
- [Worker Pools](https://gobyexample.com/worker-pools)
|
|
- [Rate Limiting](https://gobyexample.com/rate-limiting)
|
|
|
|
## Week 4
|
|
|
|
- **Videos**
|
|
- [Lexical Scanning in
|
|
Go](https://www.youtube.com/watch?v=HxaD_trXwRE)
|
|
- [Concurrency is not
|
|
parallelism](https://blog.golang.org/concurrency-is-not-parallelism)
|
|
- Blog Posts
|
|
- [Share Memory By
|
|
Communicating](https://blog.golang.org/share-memory-by-communicating)
|
|
- [A GIF decoder: an exercise in Go
|
|
interfaces](https://blog.golang.org/gif-decoder-exercise-in-go-interfaces)
|
|
- [Error handling and
|
|
Go](https://blog.golang.org/error-handling-and-go)
|
|
- [Defer, Panic, and
|
|
Recover](https://blog.golang.org/defer-panic-and-recover)
|
|
|
|
## Week 5
|
|
|
|
Chapter 11: [Packages](http://www.golang-book.com/books/intro/11)
|
|
|
|
- Creating Packages
|
|
- Documentation
|
|
|
|
Chapter 12: [Testing](http://www.golang-book.com/books/intro/12)
|
|
|
|
Chapter 13: [The Core Packages](http://www.golang-book.com/books/intro/13)
|
|
|
|
- Strings
|
|
- Input / Output
|
|
- Files & Folders
|
|
- Errors
|
|
- Containers & Sort
|
|
- Hashes & Cryptography
|
|
- Servers
|
|
- Parsing Command Line Arguments
|
|
- Synchronization Primitives
|
|
- **Go By Example**
|
|
- [Sorting](https://gobyexample.com/sorting)
|
|
- [Sorting by
|
|
Functions](https://gobyexample.com/sorting-by-functions)
|
|
- [URL Parsing](https://gobyexample.com/url-parsing)
|
|
- [SHA1 Hashes](https://gobyexample.com/sha1-hashes)
|
|
- [Base64 Encoding](https://gobyexample.com/base64-encoding)
|
|
- [Atomic Counters](https://gobyexample.com/atomic-counters)
|
|
- [Mutexes](https://gobyexample.com/mutexes)
|
|
- [Stateful
|
|
Goroutines](https://gobyexample.com/stateful-goroutines)
|
|
- [Command-Line
|
|
Arguments](https://gobyexample.com/command-line-arguments)
|
|
- [Command-Line Flags](https://gobyexample.com/command-line-flags)
|
|
- [Environment
|
|
Variables](https://gobyexample.com/environment-variables)
|
|
- [Spawning Processes](https://gobyexample.com/spawning-processes)
|
|
- [Exec'ing Processes](https://gobyexample.com/execing-processes)
|
|
- [Signals](https://gobyexample.com/signals)
|
|
- [Exit](https://gobyexample.com/exit)
|
|
|
|
Chapter 14: [Next Steps](http://www.golang-book.com/books/intro/14)
|
|
|
|
- Study the Masters
|
|
- Make Something
|
|
- Team Up
|
|
|
|
***
|
|
|
|
Go is an exciting language, and a great complement to the Ruby work we
|
|
do. Working through this program was a fantastic intro to the language
|
|
and prepared us to create our own Go programs for great justice. Give it
|
|
a shot and let us know how it goes.
|