---
title: Go
homepage: https://golang.org
tagline: |
  Go makes it easy to build simple, reliable, and efficient software.
alias: go
description: |
  See https://webinstall.dev/go
---

Alias for <https://webinstall.dev/go>.

To update or switch versions, run `webi go@stable` (or `@v1.21`, `@beta`, etc).

### Files

```text
~/.config/envman/PATH.env
~/.local/opt/go/
~/go/
```

## Cheat Sheet

> Go is designed, through and through, to make Software Engineering easy. It's
> fast, efficient, reliable, and something you can learn in a weekend.
>
> If you subscribe to
> [_The Zen of Python_](https://www.python.org/dev/peps/pep-0020/), you'll
> [love](https://go-proverbs.github.io/) >
> [Go](https://www.youtube.com/watch?v=PAAkCSZUG1c).

You may also want to install the Go IDE tooling:
[go-essentials](/go-essentials).

### Hello World

1. Make and enter your project directory
   ```sh
   mkdir -p ./hello/cmd/hello
   pushd ./hello/
   ```
2. Initialize your `go.mod` to your _git repository_ url:
   ```sh
   go mod init github.com/example/hello
   ```
3. Create a `hello.go`

   ```sh
   cat << EOF >> ./cmd/hello/hello.go
   package main

   import (
     "fmt"
   )

   func main () {
     fmt.Println("Hello, World!")
   }
   EOF
   ```

4. Format, build, and run your `./hello`
   ```sh
   go fmt ./...
   go build -o hello ./cmd/hello/
   ./hello
   ```
   You should see your output:
   ```text
   > Hello, World!
   ```

### How to run a Go program as a service

On Linux:

```sh
# Install serviceman (compatible with systemd)
webi serviceman
```

```sh
# go into your programs 'opt' directory
pushd ./hello/

# swap 'hello' and './hello' for the name of your project and binary
serviceman add --name 'hello' -- \
    ./hello

# Restart the logging service
sudo systemctl restart systemd-journald
```
