The Go programming language (or golang), created at Google by Rob Pike and Ken Thompson, is one of the prominent new programming languages that has been developed to meet the needs of large scale application development, modern development methodologies like Agile and DevOps, high performance multi-core hardware technology and the need for increasing scalability. Go was designed to replace legacy programming languages in current use which were not designed for the massive scale of integration and the shrinking release cycles required by software projects in modern tech organizations like Google. Go is a C-style language which is syntactical similar to other C-style languages like C and Java, however Go contains a number of innovations to enable programmers to write high performance code that is still execution safe. Concurrency and other core language features allow Go applications to exploit the power and speed of modern high performance technical architectures. Go is also a complete development, build and test environment designed to support rapid delivery methodologies where large numbers of programmers can collaborate on highly scalable, multiple component applications with rapid build and short delivery cycles. The ability to integrate Go packages from anywhere on the Internet into a build, similar way to R, Python and Ruby, allow highly distributed teams to work in real time without any reliance of third party tool chains. The course starts with an overview of the basic language structure from data types, functions, packages, libraries, pointers and the development environment exploring the unique features of Go and how these differ from other programming languages while emphasizing Go best practices for using those features. This is followed by a discussion the built-in data structures of Go such as arrays, maps and slices but with an emphasis again on how to use these Go constructs to write high performance code. Also covered is the unique Go error system and the use of deferred functions to create high tolerance code. The use of structs, interfaces and methods are explained in detail emphasizing again the Go best practices, how to use these program constructs to create user defined types and how to use these to implement object oriented style program designs. However the course also covers the use of Go to implement func-tional programming designs using functions as first class objects, anonymous functions, encapsulations and other related functional programming techniques. Integrated into the course is a tour of the Go build system, vendor management, Go libraries, profiling and benchmarking utilities as well as the unit test facilities for test driven development. The course also explores in some depth how concurrency works in Go using goroutines and channels, including how to design code to take advantage of concurrency in order to produce high performance applications. This includes a brief introduction of Go concurrency patterns and architectures. The class is designed to be about 50% hands on labs and exercises, about 25% theory and 25% instructor led hands on learning where students code along with the instructor. The course “Advanced Go Programming for Developers” (PT20183) is designed to follow this course.
Before taking this course, students should have at least an intermediate level or experience in an object oriented language like Python or Ruby. Due to the pace of the course, it is not recommended for beginning or inexperienced programmers.
3 Days/Lecture & Lab
- Go syntax – variables, data types, functions, packages and errors.
- Go data structures – arrays, slices and maps.
- User defined types – structs, embedded structs and interfaces.
- Methods and interfaces – writing OO applications with types, methods and interfaces.
- Survey of the the Go packages.
- Using the Go tool chain for continuous integration, test and delivery.
- Testing, benchmarking, tracing and profiling in Go.
- Large scale project dependency management using the Go tool chain.
- First class functions, encapsulation and functional programming in Go.
- Go concurrency – goroutines, channels and concurrency designs.
- Best practices and the Go specific programming idioms and patterns.