# 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)]
