Go (Русский)
Go — язык программирования, главными особенностями которого является быстрая компиляции, сборка мусора и многопоточность.
Contents
Установка
На сегодняшний день существует два компилятора Go и оба доступны в официальном репозитории:
- gc: общее название для официального набора компиляторов 8g(x86), 6g(amd64), 5g(arm), с версии 1.5 заменяются на один единственный go tool compile, устанавливается с пакетом go
- + быстрая компиляция
- gccgo: фронтэнд для gcc, входит в состав его коллекции компиляторов, устанавливается с пакетом gcc-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
Создадим также само рабочее пространство:
$ 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