mihalis's picture

Mastering Go - Second Edition

Mastering Go - 2nd Edition.

Mastering Go - Second Edition: Create Golang production applications using network libraries, concurrency, machine learning, and advanced data structures.

The page of the book is here. You can also visit the web page of the book at Packt.

mihalis's picture

Korean version of Mastering Go!

My Mastering Go book has been translated in Korean!

You can find more information about the Korean version at

You can still find information about the English version at

mihalis's picture

Mastering Go FAQ

1. Does the book have a web page?
Yes: Mastering Go web page and Mastering Go TOC.

2. Is Mastering Go good for amateur programmers?
Although anyone can read Mastering Go, if you have never programmed before, Mastering Go might not be the best choice.

3. Who is this book for?
Mastering Go is for people who are already familiar with Go or any other programming language and want to take their Go knowledge to the next level!

4. Is Mastering Go different from Go Systems Programming?
Go Systems Programming is about learning to develop system tools in Go. Mastering Go is about learning the characteristics and the inner workings of the Go Programming Language in order to write better Go code.

5. Why buy Mastering Go?
Because Mastering Go will make you a better Go developer. The book contains many autonomous examples in order to illustrate the Go topics that it covers.

6. Have more questions?
Contact me using

You can get Mastering Go from Packt,,, or any other Amazon store.

mihalis's picture

Mastering Go TOC

Mastering Go Table Of Contents:

Chapter 1: Go and the Operating System
Chapter 2: Understanding Go Internals
Chapter 3: Working with Basic Go Data Types
Chapter 4: The Uses of Composite Types
Chapter 5: Enhancing Go code with Data Structures
Chapter 6: What you might not know about Go Packages
Chapter 7: Reflection and Interfaces for all seasons
Chapter 8: Telling a UNIX system what to do
Chapter 9: Go Concurrency – Goroutines, Channels and Pipelines
Chapter 10: Go Concurrency – Advanced Topics
Chapter 11: Code Testing, Optimization and Profiling
Chapter 12: The Foundations of Network Programming in Go
Chapter 13: Network Programming – Building Servers and Clients

mihalis's picture

What is Systems Programming?

Systems programming is a special area of programming on UNIX machines. Most commands that have to do with System Administration tasks such as disk formatting, network interface configuration, module loading, kernel performance tracking, etc. are implemented using the techniques of Systems Programming. Additionally, the /etc directory, which can be found on all UNIX systems, contains plain text files that deal with the configuration of a UNIX machine and its services and are also manipulated using systems software.

You can group the various areas of systems software and related system calls in the following sets:

  • File I/O: this area deals with file reading and writing operations, which is the most important task of an operating system. File input and output must be fast and efficient but, above all, it must be reliable.
  • Advanced File I/O: apart from the basic input and output system calls, there are also more advanced ways to read or write to a file including asynchronous I/O and non-blocking I/O.
  • System Files and Configuration: this group of systems software includes functions that allow you to handle system files such as /etc/passwd and get system specific information such as system time and DNS configuration.
  • Files and Directories: this cluster includes functions and system calls that allow the programmer to create and delete directories and get information such as the owner and the permissions of a file or a directory.
  • Process Control: this group of software allows you to create and interact with UNIX processes.
  • Threads: when a process has multiple threads, it can perform multiple tasks. However, threads must be created, terminated and synchronized, which is the purpose of this collection of functions and system calls.
  • Server Processes: this set includes techniques that allow you to develop server processes, which are processes that get executed in the background without the need for an active terminal.
  • Interprocess Communication: this set of functions allows processes that run on the same UNIX machine to communicate with each other using features such as pipes, FIFOs, message queues, semaphores and shared memory.
  • Signal Processing: signals offer processes a way of handling asynchronous events, which can be very handy. Almost all server processes have extra code that allows them to handle UNIX signals using the system calls of this group.
  • Network Programming: this is the art of developing applications that work over computer networks with the help of TCP/IP and is not Systems programming per se. However, most TCP/IP servers and clients are dealing with system resources, users, files and directories so most of the times you cannot create network applications without doing some kind of Systems programming.

    The challenging thing with Systems Programming is that you cannot afford to have an incomplete program; you can either have a fully working, secure program that can be used on a production system or nothing at all. This mainly happens because you cannot trust end users and hackers!

    Want to learn about Systems Programming using Go?
    Get my book Go Systems Programming from Packt or from

  • Pages

    Subscribe to RSS - book