O'Reilly logo
live online training icon Live Online training

Continuous Delivery and Tooling in Go

Learn to use Go automation tools for package management, testing, Continuous Integration, and IDE integration

Benjamin Muschko

Today, developers are under pressure to deliver software fast, reliable and frequently. The right tooling can help with boosting developer productivity dramatically. Join Benjamin Muschko to discuss what Go has to offer for package management, testing support, Continuous Integration, and IDE integration. You’ll leave with a good understanding on how to implement common automation tasks for Go projects to reduce your time to market.

In this course, you’ll learn how to improve software quality by analyzing your source code with the right tooling support and how to ensure reproducibility of your project by using proper package management. Ben will walk you through writing and executing tests to detect bugs before delivering the software to production. At the end of the training, we’ll set up a CI/CD pipeline that orchestrates the tooling into a fully automated process.

This class builds upon the knowledge gained in the training “Getting Started with Go.” It’s also a great addition for any beginner or advanced Go programmer interested in getting to know the wider Go tooling ecosystem with the help of engaging hands-on exercises.

What you'll learn-and how you can apply it

By the end of this live, online course, you’ll understand:

  • How to use the established package manager dep to declare and resolve dependencies
  • How to write effective test code using helpful testing frameworks and techniques
  • How to implement automation tasks every Go project needs, such as performing source code analysis and assembling binaries
  • How to set up Continuous Integration for your project
  • How to model a build pipeline with Jenkins

And you’ll be able to:

  • Improve the quality of their production deliverables by analyzing and testing the source code as part of the development process
  • Automate their Go project to avoid error-prone, manual intervention
  • Set up a CI/CD pipeline to deliver features fast, frequently and reliably

This training course is for you because...

  • You're a beginner to the Go language and want to learn more about the tooling ecosystem


  • Beginner-level knowledge of the Go language
  • Experience with project automation is helpful, but not required

Materials required in advance of the course:

  • Installation of latest Go runtime. This course will not explain the basic setup steps.
  • Installation of VSCode + the Go plugin used during the hands-on exercises.
  • Please have a GitHub account available. Some hands-on exercises emulate the typical developer workflow of pulling and pushing code.

Recommended preparation:

Take Introduction to the Go Programming Language (live online training)

About your instructor

  • Benjamin Muschko is a software engineer, and a consultant and trainer with over 15 years of experience in the industry. He’s passionate about project automation, testing and Continuous Delivery. Ben is the author of Gradle in Action (Manning). He is a frequent speaker at conferences and is an avid Open Source advocate.


The timeframes are only estimates and may vary according to how the class is progressing

  • What tools do you find helpful in your projects? (5 mins)
  • Source code analysis (30 mins)

    • Lecture: Detecting common mistakes with the vet command (5 mins)
    • Lecture: Enforcing coding style conventions with golint (5 mins)
    • Lecture: Checking for unchecked errors with errcheck (5 mins)
    • Lecture: Calculating cyclomatic complexities of functions with gocyclo (5 mins)
    • Hands-on exercise: Fixing common issues in Go code with sufficient tooling (5 mins)
    • Lecture: GitHub project health reporting with Go report card (5 mins)
  • Package management (25 mins)

    • What kind of package management do you use? (2 mins)
    • Lecture: The shortcomings of using the go get command (3 mins)
    • Lecture: Recap of vendoring (2 mins)
    • Lecture: Declaring and resolving dependencies with dep (10 mins)
    • Hands-on exercise: Resolving dependencies with dep (5 mins)
    • Lecture: Locking dynamic dependency versions (3 mins)
    • Break (5 mins)
  • Implementing and executing tests (40 mins)

    • What kind of tests do you write? What’s the tooling support you use? (2 mins)
    • Lecture: Organizing and writing test code with the standard testing package (5 mins)
    • Lecture: Executing tests from the command line (5 mins)
    • Hands-on exercise: Implementing a simple test (5 mins)
    • Lecture: Generating and rendering code coverage metrics & reporting (5 mins)
    • Lecture: Usage of helpful testing toolkits and frameworks (10 mins)
    • Hands-on exercise: Implementing and running tests using testify (8 mins)
  • Building deliverable artifacts (15 mins)

    • Lecture: Generating API docs with godoc (5 mins)
    • Lecture: Assembling cross-platform binaries (5 mins)
    • Hands-on exercise: Building binaries for different platforms (5 mins)
    • Break (5 mins)
  • Publishing deliverable artifacts (20 mins)

    • Lecture: Releasing versioned binaries to GitHub and/or a binary repository (7 mins)
    • Hands-on exercise: Publishing multiple binaries to GitHub (5 mins)
    • Lecture: Hosting artifacts on a binary repository manager (8 mins)
  • CI/CD for Go projects (30 mins)

    • Interactive: What are the requirements for project automation in your project? What products do you use? (2 mins)
    • Lecture: Importance of project automation (3 mins)
    • Lecture: Configuring and building a simple project in Travis CI (10 mins)
    • Lecture: Modeling a build pipeline in Jenkins as code (15 mins)
  • Wrap up and Q&A (5 mins)