Developing the which(1) Utility in Go

Let’s learn how to create the Go version of the which(1) utility to locate a program file in the user's PATH value.

Let’s now discuss a practical example for developing a Go version of the which(1) utility, which locates a program file in the user's PATH value.

Go can work with our operating system through a set of packages. A good way to learn a new programming language is by trying to implement simple versions of traditional UNIX utilities. In this lesson, we’ll see a Go version of the which(1) utility, which will help us understand the way Go interacts with the underlying OS and reads environment variables.

Go code for which(1)

The presented code, which will implement the functionality of which(1), can be divided into three logical parts. The first part is about reading the input argument, which is the name of the executable file that the utility will be searching for. The second part is about reading the PATH environment variable, splitting it, and iterating over the directories of the PATH variable. The third part is about looking for the desired binary file in these directories and determining whether it can be found or not, whether it is a regular file, and whether it is an executable file. If the desired executable file is found, the program terminates with the help of the return statement. Otherwise, it will terminate after the for loop ends, and the main() function exits.

Coding example

Now, let’s see the code, beginning with the logical preamble that usually includes the package name, the import statements, and other definitions with a global scope:

Get hands-on with 1200+ tech skills courses.