mihalis's picture

A review of Mastering Go, 2nd edition

This is a review for my book that can be found in

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

mihalis's picture

Using the context Go package

I wrote "Using the context Go package" for

You can find more information about the context package at

mihalis's picture

Mastering Go for UNIX administrators, UNIX developers and Web Developers

You can find more about the Mastering Go for UNIX administrators, UNIX developers and Web Developers course here.

You still have time to register!

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 - Programming