There are a few million new languages making buzz on the Internet these days, and Go is one of them! Go hits a nice sweet spot between ease of coding, speed of execution, and modern features such as type inferencing, concurrency, and a minimalist but well-designed OO system.

In this class, I'll introduce you to Go basics including syntax, the type system, OO in Go, packages and package management, and concurrency.

This is a hands-on course. Each lecture section is followed by a hands-on exercise section where you put what you've just learned into practice. The instructor will work with each student individually as needed to help you get the most from these exercises.

Students are expected to bring a laptop. You will also be provided with a tarball a week or so before the class is scheduled. This will contain the exercises for the class.

Intended Audience

This class is aimed at anyone who wants to learn Go. I will assume that you have experience programming in at least one other language, but no assumption are made about what language that is, nor are you expected to be familiar with Go.

Supplies Provided: I will provide a tarball via email containing the class exercises.

Supplies Needed: Students are expected to bring a laptop with the most recent version of Go installed and an editor of their choice.

Outline

0. $GOROOT, the Go Toolchain, and the Go Ecosystem 0.1 go build and go run 0.2 gofmt 0.2 golang.org 0.4 godoc and godoc.org 1. Basics 1.0 Go Style Naming 1.2 Variables, Type Declarations, & Function Calls 1.3 Data Structures 1.4 Unit Testing with "go test" 1.5 Defining Functions 1.6 Control Structures 1.7 Importing 1.8 Error Handling 2. Types, Interfaces, and OO in Go 2.0 Method Calls 2.1 Defining Types 2.2 Interfaces 2.3 Type Switch 3. Packages 3.0 go get 3.1 File Layout 3.2 Importing Your Own Packages 3.3 Package Management 3.4 Reproducible Builds with Godep 4 Concurrency with Channels 4.0 Goroutines 4.2 Fire and Forget Example 4.2 Message Passing Example 4.3 Parallelization

Speaker Bio:

Dave Rolsky has been a Perl developer since 1999, and has created or contributed to dozens of CPAN modules. He is a member of the Moose core development team, and in early 2009 completed a TPF grant to substantially rewrite and expand the Moose documentation. He is also the co-author of Embedding Perl in HTML with Mason and RT Essentials.

He spends a lot of his free time on animal advocacy with Compassionate Action for Animals, working on a variety of programs including fundraising and planning Twin Cities Veg Fest .