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

***
  * **Introduction to Go Classical Patterns [Video]**
    * Author: Mario Castro Contreras
    * Publication Date: April 27, 2017
    * ISBN:978-1788398039

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

***
  * **Go Essentials for Full Stack Web Development [Video]**
    * Author: Kamesh Balasubramanian
    * Publication Date: April 30, 2017
    * ISBN:978-1787280946

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

***
  * **Go Behavioral Patterns [Video]**
    * Author: Mario Castro Contreras
    * Publication Date: May 27, 2017
    * ISBN:978-1788397377

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

***
  * **Go Concurrency [Video]**
    * Author: Mario Castro Contreras
    * Publication Date: May 30, 2017
    * ISBN:978-1788394161

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

***
  * **Advanced Cloud Native Go [Video]**
    * Author: Mario-Leander Reimer
    * Publication Date: May 31, 2017
    * ISBN:978-1787286238

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

***
  * **Go: Building 7 Real-World Projects [Video]**
    * Author:  Ben Tranter, Rostislav Dzinko and Mat Ryer
    * Publication Date: May 31, 2017
    * ISBN:978-1788290494

[[course](https://www.packtpub.com/application-development/go-building-7-real-world-projects)]

***
  * **Modern Golang Programming [Video]**
    * Author:  Mina Andrawos
    * Publication Date: June 23, 2017
    * ISBN:978-1787125254

[[video](https://www.packtpub.com/web-development/modern-golang-programming-video)]

***
  * **Back-End Web Development using Go [Video]**
    * Author:  Kamesh Balasubramanian
    * Publication Date: June 30, 2017
    * ISBN:978-1788392761

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

***
  * **Getting started with Go Programming Language**
    * Author:  Matthew Spaulding
    * Publication Date: August 2017
    * ISBN: 978-1788471855

[[course]( https://www.packtpub.com/networking-and-servers/getting-started-go-programming-language-integrated-course)]

***
  * **Beginner Solutions in Go – The Basics, Clients, and Servers [Video]**
    * Author:  Aaron Torres
    * Publication Date: August 2017
    * ISBN: 978-1788629089

[[video]( https://www.packtpub.com/application-development/beginner-solutions-go-%E2%80%93-basics-clients-and-servers-video)]

***
  * **Front-End Web Development using Go (Video)**
    * Author: Kamesh Balasubramanian
    * Publication Date: September 2017
    * ISBN: 978-1788398916

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

***
  * **Advanced Solutions in Go – Testing and Distributed Systems**
    * Author: Aaron Torres
    * Publication Date: September 2017
    * ISBN: 978-1788627887
        
[[video](https://www.packtpub.com/application-development/advanced-solutions-go-%E2%80%93-testing-and-distributed-systems-video)]

***
  * **Go Standard Library Solutions (Video)**
    * Author: Johnny Boursiquot
    * Publication Date: November 2017
    * ISBN: 978-1788474160
    
[[video](https://www.packtpub.com/application-development/go-standard-library-solutions-video)]

***
* **Machine Learning with Go [Video]**
   * Author: Daniel Whitenack
   * Publication Date: February 2018
   * ISBN: 9781789134735
 
[[video](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-go-video)]

***
* **Go Production Deployments [Video]**
    * Author: Kamesh Balasubramanian
    * Publication Date: March 2018
    * ISBN: 9781788399340
        
[[video](https://www.packtpub.com/web-development/go-production-deployments-video)]

***
* **Network Programming with Go [Video]**
    * Author: Vladimir Vivien
    * Publication Date: April 2018
    * ISBN: 9781788476560
    
[[video](https://www.packtpub.com/networking-and-servers/network-programming-go-video)]

***
* **Learning Go Data Structures and Algorithms [Video]**
    * Author: Gustavo Chaín
    * Publication Date: May 2018
    * ISBN: 9781788392563
    
[[video](https://www.packtpub.com/application-development/learning-go-data-structures-and-algorithms-video)]

***
* **Hands-on with Go [Video]**
    * Author: Tarik Guney
    * Publication Date: May 2018
    * ISBN: 9781789132519
    
[[video](https://www.packtpub.com/networking-and-servers/network-programming-go-video)]

***
 * **Learn Go in 3 Hours [Video]**
    * Author: Jonathan Bodner
    * Publication Date: June 2018
    * ISBN: 9781788992053
    
[[video](https://www.packtpub.com/application-development/learn-go-3-hours-video)]

***
 * **Hands-on Serverless Computing with Go [Video]**
    * Author: Matthew Stoodley
    * Publication Date: June 2018
    * ISBN: 9781789132830
    
[[video](https://www.packtpub.com/application-development/hands-serverless-computing-go-video)]

***
  * **Hands-on Concurrency with Go [Video]**
    * Author: Leo Tindall
    * Publication Date: July 2018
    * ISBN: 9781788993746
    
[[video](https://www.packtpub.com/application-development/hands-concurrency-go-video)]

***
  * **Troubleshooting Go Application Development [Video]**
    * Author: Shawn Milochik
    * Publication Date: July 2018
    * ISBN: 9781788997072
 
[[video](https://www.packtpub.com/application-development/troubleshooting-go-application-development-video)]

***