⭐️Go Workspaces: A Beginner's Guide

I am excited to continue my learning journey in DevOps. I believe that DevOps is the future of software development, and I am excited to be a part of the movement.
#90DaysOfDevOps
Day-10: Go Workspace
Go workspaces are a feature introduced in Go 1.18 that allow you to work on multiple Go modules simultaneously. Each module within a workspace is treated as a main module when resolving dependencies. This means that you can add features to one module and use them in another module without having to publish the changes to the first module.
To create a workspace, you use the go work init command. This command creates a go.work file in the root of your workspace directory. The go.work file has use and replace directives that override the individual go.mod files, so there is no need to edit each go.mod file individually.
A typical Go workspace consists of three main directories:
src: This directory contains the source code files of your Go projects and packages. Each project or package resides in its own subdirectory within
src.pkg: When you build your Go code, the resulting package objects, including compiled libraries, are stored in the
pkgdirectory. These package objects are reused for faster subsequent builds.bin: The executable binaries generated by
go installorgo buildcommands are placed in thebindirectory. You can add this directory to your system's PATH to conveniently run your Go programs from anywhere.
To add modules to the workspace, you use the go work use command. This command adds the specified module directory to the workspace. You can also edit the go.work file manually.
To run a Go program in the workspace, you use the go run command. The go run command will automatically find the modules desired to run the program and download them if they are not already in the workspace.
If you are working on a project that uses a lot of Go modules, then I favor the Go workspace. They make it easy to work on multiple modules concurrently, share differences between modules, and track dependencies.



