Learning Go Episode 2 — Further into packages, dependencies, application creation, and IDE’s
Episode Post & Video Links: 1, 2 (this post), 3, 4, & 5 (almost done)
In episode two I went over a lot of the material that I covered in the first episode, but added more context, historical reasons certain things are the way they are in Go and the stack, and went over a number of new elements of information too. One thing I got further into this episode is the package and dependency management with Go Dep and also how to create a package, or dependency library for use in other Go libraries or applications. It’s just a small introduction in this episode, but pivotal to future episodes, as I’ll be jumping further into library creation and related details.
In this post I’ve got the time point breakdown like usual, but also a few additional bits of information and code examples, plus links to the repository I’ve setup for this particular episode. The quick links to those references are below, and also I’ll link at particular call out points within the time points.
- Episode 2 Repository
- Github: https://github.com/golang/go
- Golang: https://golang.org
- “The Go Programming Language” by Alan A. A. Donovan and Brian W. Kernighan
Key Topics Covered
Data Types, Packages, and Dependency Management
2:52 — Fumbling through getting started. It is after all Saturday morning!
3:00 — Recap of what we covered in the first session. Includes a quick review of the previous session code too, such as the random data generation library we setup and used.
6:40 — Covering some specifics of the IDE’s, the stories of the benefits of Go having a specific and somewhat detailed convention to the way syntax, variables, and related features are used.
7:40 — Covering
gofmt and what it gives us.
9:45 – Looking at the
gofmt plugins and IDE features around the conventions.
14:06 – New example time! In this one, I work through an example showing how to find duplicate lines in passed in text.
Duplicate Line Finder
I went through the various steps of creating the code, but then took a little bit of a detour from the example in the book. Instead of lines by the CLI it takes in content from a text file. The code in main.go ended up like this.
Then if you’d like to check out the text file and remaining content in that project, check out the master branch of the episode 2 repo.
36:34 — Here I take a thorough step through committing this project to github, which is the included repo in this post. However I step through the interface of using Jetbrains Goland to do the commit, how it enables
gofmt and other features to improve the condition of code and ensure it meets linter demands and related crtieria. I also cover the .gitignore file and other elements to create a usable repository.
44:30 – Setting up the repository for today’s code at https://github.com/Adron/learning-go-…
50:00 – Setup of the key again for using Github. How to setup your ssh keys using ssh-keygen.
56:00 – Going beyond just the language, and building out a Go build on Travis CI.
1:10:16 – Creating a new branch for the next code examples and topics. At this point I shift into type declarations. Working through some constants, very basic function declarations, and related capabilities to calculate temperatures between Fahrenheit and Celsius.
The tempApp Branch is available in the repository here.
At this point I shift into type declarations. Working through some constants, very basic function declarations, and related capabilities to calculate temperatures between Fahrenheit and Celsius.
During this point, we take a look at our first package. This package ended up looking like this.
In the main.go file, I showed how you can use this package by adding a respective import shown in this code.
1:17:54 — At this point, to increase readability of font sizes I get into the various Goland IDE options.
1:38:12 — Creating the final branch for this session to pull in a public package and use it in project. For this, I pull in a random data generation package to use in some application code.
1:44:50 — Further discussion and explanation of what to include in .gitignore files to manage projects, but also what is and isn’t included for dependencies and other details around all of this.
2:13:22 — The wicked awesome hacker outtro.