# Screencasts

## Writing, building, installing, and testing Go code

A first stop for newcomers to the Go Programming Language.

This screencast describes setting up a workspace (GOPATH), writing commands and packages, using the go tool to build and install, and using the testing package to write unit tests.

[[video](http://www.youtube.com/watch?v=XCsL89YtqCs)]

***
  * **Go for Web Development [Video]**
    * Author: Larry Price
    * Publication Date: December 29, 2015
    * ISBN:978-1784397982

[[video](https://www.packtpub.com/web-development/go-web-development-video/)]

***
  * **Go: Building Web Applications**
    * Authors: Nathan Kozyra, Mat Ryer
    * Publication Date: August 2016
    * ISBN:978-1787123496

[[Course](https://www.packtpub.com/application-development/go-building-web-applications)]

***
  * **The Go Programming Language Guide - Code Like a Pro [Video]**
    * Author: Eduonix
    * Publication Date: September 23, 2016
    * ISBN:978-1787128385

[[video](https://www.packtpub.com/application-development/go-programming-language-guide-code-pro-video)]

***
  * **Go Projects [Video]**
    * Authors: Ben Tranter & Rostislav Dzinko
    * Publication Date: November 14, 2016
    * ISBN:978-1786460103

[[video](https://www.packtpub.com/application-development/go-projects-video)]

***
  * **Build webapps in Go without using a framework [Video]**
    * Authors: Suraj Patil
    * Publication Date: December 2016

[[Course](https://www.youtube.com/playlist?list=PL41psiCma00wgiTKkAZwJiwtLTdcyEyc4)]

***
  * **Mastering Go [Video]**
    * Authors: Mina Andrawos
    * Publication Date: January 31, 2017
    * ISBN:978-1786468239

[[video](https://www.packtpub.com/application-development/mastering-go-programming-video)]

***
  * **Getting started with Cloud Native Go [Video]**
    * Author: Mario-Leander Reimer
    * Publication Date: February 24, 2017
    * ISBN:978-1787125476

[[video](https://www.packtpub.com/application-development/getting-started-cloud-native-go)]

***