Go Language

Go is a statically typed, compiled programming language designed at Google. It is syntactically similar to C, but with memory safety, garbage collection, structural typing, and CSP-style concurrency. It is often referred to as Golang because of its former domain name, golang.org, but its proper name is Go.



To install go for the current user, run:

guix package -i go gcc-toolchain

If you prefer to run go in a throw-away environment:

guix environment --pure --ad-hoc go gcc-toolchain


By default, go files are at ~/go:

cd ~/
mkdir go

The source is in a subfolder:

cd go
mkdir src

Individual modules, are again in a subfolder:

cd src
mkdir hello

To init the module:

cd hello
go mod init

Now write some go code:

go mod init
nano hello.go

When you’re done:

go run .


C compiler “gcc” not found

guix package -i gcc-toolchain

unknown type name gnuc_va_list

$ go get golang.org/x/crypto/ssh
go: downloading golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f
go: downloading golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1
# runtime/cgo
In file included from libcgo.h:7,
                 from gcc_context.c:8:
/home/franz/.guix-profile/include/stdio.h:52:9: error: unknown type name ‘__gnuc_va_list’
   52 | typedef __gnuc_va_list va_list;
      |         ^~~~~~~~~~~~~~
/home/franz/.guix-profile/include/stdio.h:52:24: error: conflicting types for ‘va_list’; have ‘int’
   52 | typedef __gnuc_va_list va_list;
      |                        ^~~~~~~
In file included from /home/franz/.guix-profile/include/stdarg.h:10,
                 from /home/franz/.guix-profile/include/stdio.h:36,
                 from libcgo.h:7,
                 from gcc_context.c:8:
/home/franz/.guix-profile/include/bits/alltypes.h:326:27: note: previous declaration of ‘va_list’ with type ‘va_list’ {aka ‘__va_list_tag[1]’}
  326 | typedef __builtin_va_list va_list;
      |                           ^~~~~~~
In file included from libcgo.h:7,
                 from gcc_context.c:8:
/home/franz/.guix-profile/include/stdio.h:342:22: error: unknown type name ‘__gnuc_va_list’
  342 |                      __gnuc_va_list __arg);

Find conflicting compiler:

guix package --list-installed | grep "gcc"
# look out for 'gcc', 'gcc-objc', 'gcc-objc++'

Remove with:

guix package -r gcc gcc-objc

If you are working with multiple languages, consider learning about environments.

PantherX & (unofficial) GNU Guix Wiki.

Last update: 2022-09-21 21:54:22 +0000

Inspired by the excellent Arch Linux Wiki