Go
From Gentoo Wiki
Go is an open source, statically typed, compiled programming language.
Go can be used to write software, and is used to make some of the packages that are available in the Gentoo ebuild repository.
Installation
USE flags
USE flags for dev-lang/go A concurrent garbage collected and typesafe programming language
Emerge
Install Go:
root #
emerge --ask dev-lang/go
Update
When the Go package is updated, some packages may need to be re-emerged. After a Go update, Portage outputs:
* After dev-lang/go is updated it is recommended to rebuild * all packages compiled with previous versions of dev-lang/go * due to the static linking nature of go. * If this is not done, the packages compiled with the older * version of the compiler will not be updated until they are * updated individually, which could mean they will have * vulnerabilities. * Run 'emerge @golang-rebuild' to rebuild all 'go' packages * See https://bugs.gentoo.org/752153 for more info
So it is advisable, after updating Go, to run:
root #
emerge --ask @golang-rebuild
Configuration
Environment variables
Users may customize how Go builds packages by setting these variables, similar to the way the C build system is configured using CFLAGS or LDFLAGS:
- GOAMD64 (corresponds to x86_64 microarchitecture levels)
- GO386 (for x86)
- GOARM (for arm)
- CGO_CFLAGS
- CGO_CXXFLAGS
- CGO_FFLAGS
- CGO_LDFLAGS
For example, in /etc/portage/make.conf, one may set:
CGO_CFLAGS="${CFLAGS}"
CGO_CXXFLAGS="${CXXFLAGS}"
CGO_FFLAGS="${FFLAGS}"
CGO_LDFLAGS="${LDFLAGS}"
# https://github.com/golang/go/wiki/MinimumRequirements#architectures
# Pick carefully based on https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels!
# For amd64 (v1 (default)/v2/v3/v4):
#GOAMD64="v3"
# For x86 (sse2 (default)/softfloat):
#GO386=sse2
# For arm (5/6 (usually default)/7):
#GOARM=6
Warning
The MinimumRequirements variables for optimization at compilation time, as with CFLAGS, will produce binaries that will not run on unsupported processors.
The MinimumRequirements variables for optimization at compilation time, as with CFLAGS, will produce binaries that will not run on unsupported processors.
Usage
Invocation
user $
go --help
Go is a tool for managing Go source code. Usage: go <command> [arguments] The commands are: bug start a bug report build compile packages and dependencies clean remove object files and cached files doc show documentation for package or symbol env print Go environment information fix update packages to use new APIs fmt gofmt (reformat) package sources generate generate Go files by processing source get add dependencies to current module and install them install compile and install packages and dependencies list list packages or modules mod module maintenance work workspace maintenance run compile and run Go program test test packages tool run specified go tool version print Go version vet report likely mistakes in packages Use "go help <command>" for more information about a command. Additional help topics: buildconstraint build constraints buildmode build modes c calling between Go and C cache build and test caching environment environment variables filetype file types go.mod the go.mod file gopath GOPATH environment variable gopath-get legacy GOPATH go get goproxy module proxy protocol importpath import path syntax modules modules, module versions, and more module-get module-aware go get module-auth module authentication using go.sum packages package lists and patterns private configuration for downloading non-public code testflag testing flags testfunc testing functions vcs controlling version control with GOVCS Use "go help <topic>" for more information about that topic.
Removal
Unmerge
To remove Go:
root #
emerge --ask --depclean --verbose dev-lang/go
See also
- Writing go Ebuilds — a short reference, intended to be read alongside Basic guide to write Gentoo Ebuilds and the go-module.eclass documentation
- Application level package management — provides best practice recommendations on managing the coexistence of operating system and application level package managers on Gentoo.