Go (Русский)

Состояние перевода: На этой странице представлен перевод статьи Go. Дата последней синхронизации: 16 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

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

Установка

Стандартным компилятором Go является go, который устанавливается с пакетом go. Команда go также включает в себя утилиты вроде go get, go doc и т.д.

Есть альтернативный компилятор gcc-go, являющийся фронтендом для GCC. Он обычно медленее, но лучше оптимизирует. Если не уверены, используйте go.

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

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

Вы можете проверить корректность установки, собрав простую программу:

hello.go
package main

import "fmt"

func main() {
	fmt.Println("Привет, Arch!")
}

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

Компиляция стандартным компилятором gc (то же, что и ):

$ go build hello.go

Компиляция с помощью gccgo (то же, что и ):

$ gccgo hello.go -o hello

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

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

$GOPATH

В языке Go поиск программ и их зависимостей (например, ), сначала выполняется в каталогах, прописанных в переменную $GOPATH, а затем - в переменной $GOROOT (путь установки go, по умолчанию ).

Значение $GOPATH по умолчанию .

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

$ mkdir -p ~/go/src

каталог предназначен для хранения исходных текстов проектов. При компиляции Go также создаст каталог для исполняемых файлов и для кэша отдельных пакетов. Вы можете добавить в переменную окружения для запуска установленных Go-программ:

export PATH="$PATH:$HOME/go/bin"

Подробнее смотрите .

Совет: $GOPATH работает как $PATH и может содержать несколько записей. Это может быть полезно для отделения пакетов, скачанных через go get, от вашего кода, например GOPATH=$HOME/go:$HOME/mygo

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

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

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

# go install -buildmode=shared std

скомпилированная библиотека станет доступна по адресу:

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

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

$ go build -linkshared -o test

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

$ go install -buildmode=shared -linkshared

после чего собранную библиотеку можно найти в папке .

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

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

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

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

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

Команда go может выполнять кросс-компиляцию для некоторых других платформ.

Если для вашей сборки не нужен cgo, то просто укажите целевую ОС и архитектуру в переменных окружения для :

$ GOOS=linux GOARCH=arm64 go build .

Смотрите официальную документацию по допустимым комбинациям и $GOARCH.

Если cgo нужен, вам придётся указать путь к кросс-компиляторам в переменных окружения .

Для примера предположим, что вам нужна кросс-компиляция в и $GOARCH=arm64.

Тогда сперва установите кросс-компилятор .

Простая программа, требующая , которая позволит нам протестировать процесс кросс-компиляции:

$ cat > hello.go <<EOF
package main

// #include <stdio.h>
// void hello() {  puts("Hello, Arch!"); }
import "C"

func main() { C.hello() }
EOF

Теперь можно запустить кросс-компиляцию примерно так:

$ GOOS=linux GOARCH=arm64 CGO_ENABLED=1 CC=/usr/bin/aarch64-linux-gnu-gcc go build hello.go

Можно убедиться, что архитектура созданного бинарника действительно :

$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=b1d92ae8840a019f36cc2aee4606b6ae4a581bf1, for GNU/Linux 3.7.0, not stripped

Если вы скопируете на подходящее устройство, вы сможете запустить его:

[alarm@rpi3 ~]$ uname -a
Linux alarm 5.3.8-1-ARCH #1 SMP Tue Oct 29 19:31:23 MDT 2019 aarch64 GNU/Linux
[alarm@arpi3 ~]$ ./hello
Hello, Arch!

Оптимизация

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

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

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

Решение проблем

Плагин Jetbrains Go

Если в Jetbrains IDE плагин Go не может найти путь к Go SDK, вероятно, вы используете не тот пакет. Удалите и установите go. Если $GOPATH прописан, IDE должна найти ваш Go SDK в .

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

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.