Go (Русский)

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Go — язык программирования, главными особенностями которого является быстрая компиляции, сборка мусора и многопоточность.

Установка

На сегодняшний день существует два компилятора Go и оба доступны в официальном репозитории:

  • gc: общее название для официального набора компиляторов 8g(x86), 6g(amd64), 5g(arm), с версии 1.5 заменяются на один единственный go tool compile, устанавливается с пакетом go
+ быстрая компиляция
+ малый размер двоичного файла
+ хорошая оптимизация
‒ goroutines здесь полновесные потоки(проблема решается использованием gold-линковщика (info)

Также с go можно установить дополнительные инструменты разработчика go-tools.

Проверка установки

Для проверки работоспособности создайте простенькую программу:

test.go
package main

func main() {
    println("Привет, Арч!")
}

Запустите программу при помощи Go:

$ go run test.go
Привет, Арч!

Компиляция стандартным компилятором gc (аналог go build -compiler=gc test.go):

$ go build test.go

Компиляция с помощью gccgo (аналог go build -compiler=gccgo test.go):

$ gccgo test.go -o test

Компиляция с помощью gccgo и gold-линковщика:

$ gccgo test.go -fuse-ld=gold -o test

$GOPATH

В языке Go поиск программ и их зависимостей (например, import пакет) сначала выполняется в каталогах, прописанных в переменную $GOPATH, а затем - в переменной $GOROOT (путь установки go, по умолчанию /usr/lib/go). Поэтому, чтобы использовать внешние зависимости, а не только базовые, что находятся в $GOROOT, нужно определить область рабочего пространства в вашем ~/.bash_profile (или его эквиваленте):

$ export GOPATH=~/go
Совет: Для просмотра переменных Go выполните команду go env

Создадим также само рабочее пространство:

$ mkdir -p ~/go/{bin,src}

Каталог src предназначен для хранения исходников проектов, а bin - для размещения исполняемых файлов, которые получаются, например, при установке наших проектов (go install пакет) или получении и установки пакета из других источников (go get github.com/путь/к/пакету).

Для удобства можно также добавить в переменную окружения $PATH путь к каталогу bin нашего рабочего пространства, что позволит запускать установленные программы языка Go так же, как, к примеру, и стандартную для linux команду ls:

$ export PATH="$PATH:$GOPATH/bin"

Для получения дополнительной информации смотрите go help gopath.

Динамические библиотеки

Компилятор Go собирает все зависимости программы в один бинарник, но начиная с версии 1.5 появилась возможность подключать библиотеки динамически. Для начала нужно скомпилировать стандартную библиотеку языка Go как динамическую:

$ go install -buildmode=shared std

теперь можно скомпилировать программу test.go с поддержкой динамических библиотек:

$ go build -linkshared -o test.go

чтобы программа могла запускатся и на других системах с ней нужно поставить также и стандартную динамическую библиотеку языка Go libstd.so, взять её можно по адресу $(go env GOROOT)/pkg/$(go env GOOS)_$(go env GOARCH)_dynlink/libstd.so Помимо наличия самой библиотеки нужно ещё установить переменную LD_LIBRARY_PATH которая укажет программе откуда брать динамческую библиотеку(на примере linux):

export LD_LIBRARY_PATH=$PWD

Кросс-компиляция

$GOARCH

386               : x386
amd64             : AMD64
amd64p32          : AMD64 с 32-указателями
arm               : ARM
arm64             : ARM64
mips64            : MIPS64
mips64le          : MIPS64-LE

$GOOS

linux             : Linux
darwin            : iOS, MacOS X
windows           : Windows
freebsd           : FreeBSD
netbsd            : NetBSD
openbsd           : OpenBSD
dragonfly         : DragonFly BSD
plan9             : Plan 9
nacl              : Native Client
android           : Android

пример компиляции:

$ GOOS=windows GOARCH=amd64 go build -o test

Оптимизация

Компилятор go по умолчанию компилирует пакет с отладочной информацией что существенно увеличивает размер исполняемого файла, чтобы этого избежать необходимо добавить флаг:

$ go build -ldflags '-s' test.go

Смотрите также