Go (Русский)

From ArchWiki
Revision as of 22:50, 12 December 2017 by Majetree (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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

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

Цитата из официальной документации по golang

Go выразительный, лаконичный, чистый и эффективный язык. Его механизмы параллельности позволяют легко создавать программы, которые получают максимальную отдачу от многоядерных и сетевых машин, в то время как новая система типов позволяет создать гибкую и модульную программу. Go не только быстро компилирует в машинный код, но также имеет сборщик мусора и run-time рефлексию. Он быстр, статически типизирован и компилируемый язык но при этом выглядит как динамически типизированный и интерпретируемый язык.


Установка

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

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


Также вместе с go можно установить пакет go-tools который включает в себя документацию(godoc) и дополнительные инструменты разработчика.

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

Для примера, скомпилируем первую программу из книги Алан А. А. Донован, Брайан У. Керниган "Язык программирования Go"

helloworld.go
package main

import "fmt"

func main() {
	fmt.Println("Hello, мир")
}

Запуск кода с помощью интерпретатора:

$ go run helloworld.go
Hello, мир

Компиляция стандартным компилятором gc:

$ go build helloworld.go

аналогичен

$ go build -compiler=gc helloworld.go

Компиляция с помощью gccgo:

$ gccgo helloworld.go -o helloworld

аналогичен

$ go build -compiler=gccgo helloworld.go

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

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

Настройка базового рабочего окружения

Для комфортной работы необходимо настроить как минимум две переменные: $GOBIN и $GOPATH.

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

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

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

$ mkdir -p $GOPATH/src

каталог src предназначен для хранения исходных текстов проектов.

Чтобы иметь возможность легко устанавливать пакеты с разных источников, таких например как https://github.com ( команда go get github.com/путь/к/пакету) или же непосредственно из своего проекта (команда go install пакет), необходимо задать переменную окружения $GOBIN:

$ export GOBIN=$GOPATH/bin
$ mkdir $GOBIN


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

$ export PATH="$PATH:$GOBIN"
Совет: Для удобства переменные $GOBIN и $GOPATH можно поместить в ваш ~/.bash_profile (или его эквивалент)
Совет: Для получения дополнительной информации смотрите go help gopath

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

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

Для подключения всей стандартной библиотеки языка Go нужно сначала скомпилировать её как динамическую:

# go install -buildmode=shared std

скомпилированная библиотека станет доступна по адресу: $(go env GOROOT)/pkg/$(go env GOOS)_$(go env GOARCH)_dynlink/libstd.so

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

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

$ go build -linkshared -o test


Если необходимо скомпилировать пакет как отдельную библиотеку, выполните:

$ go install -buildmode=shared -linkshared

после чего собранную библиотеку можно найти в папке $GOPATH/pkg/$(go env GOOS)_$(go env GOARCH)_dynlink.


Пользовательскую динамическую библиотеку в системе можно использовать если:

  • поместить её в каталог который используются системой для стандартного расположения динамических библиотек, в Арче это /usr/lib/
  • прописать путь до библиотеки в файле /etc/ld.so.conf, после чего обновить кеш командой ldconfig
  • использовать специальную переменную среды $LD_LIBRARY_PATH:
$ export LD_LIBRARY_PATH="/путь/к/каталогу/с/пользовательскими/динамическими/библиотеками"

если такая переменная уже существует, то:

$ export LD_LIBRARY_PATH="/путь/к/каталогу/с/пользовательскими/динамическими/библиотеками:${LD_LIBRARY_PATH}"

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

$GOOS и $GOARCH

darwin     386
darwin     amd64
darwin     arm
darwin     arm64
dragonfly  amd64
freebsd    386
freebsd    amd64
freebsd    arm
linux      386
linux      amd64
linux      arm
linux      arm64
linux      ppc64
linux      ppc64le
linux      mips64
linux      mips64le
linux      s390x
netbsd     386
netbsd     amd64
netbsd     arm
openbsd    386
openbsd    amd64
openbsd    arm
plan9      386
plan9      amd64
plan9      arm
solaris    amd64
windows    386
windows    amd64

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

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

Оптимизация

Компилятор go по умолчанию собирает пакет с дополнительной информацией которая влияет только на отладку и анализ полученного файла.

Чтобы этого избежать можно использовать ключ -ldflags с флагами отвечающими за отключения отладочной информации (-w) и сгенерированной таблицей символов (-s):

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

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