среда, 3 июля 2019 г.

Вспомогательные темы инструмента go: переменные среды окружения

go help environment

Команда go и инструменты, которые она вызывает, проверяют несколько различных переменных среды. Для многих из них вы можете увидеть значение по умолчанию в вашей системе, запустив 'go env NAME', где NAME - это имя переменной.

Переменные среды общего назначения:

GCCGO
    Команда gccgo для запуска 'go build -compiler=gccgo'.
GOARCH
    Архитектура или процессор, для которого компилируется 
    код. Примерами являются amd64, 386, arm, ppc64.
GOBIN
    Каталог, куда 'go install' установит команду.
GOCACHE
    Каталог, в котором команда go будет хранить 
    кешированную информацию для повторного
    использования в будущих сборках. 
GOFLAGS
    Разделенный пробелами список параметров -flag=value 
    для применения к go командам по умолчанию, 
    когда данный флаг известен текущей команде. 
    Флаги, перечисленные в командной строке применяются 
    после этого списка и, следовательно, переопределяют его.
GOOS
    Операционная система, для которой компилируется код.
    Примерами являются linux, darwin, windows, netbsd.
GOPATH
    Для более подробной информации: 'go help gopath'.
GOPROXY
    URL прокси Go модуля. См. 'go help goproxy'.
GORACE
    Опции для детектора гонки.
GOROOT
    Корень go дерева.
GOTMPDIR
    Каталог, куда команда go будет записывать
    временные исходные файлы, пакеты и бинарные файлы.

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

Переменные окружения для использования с cgo:

CC
    Команда, используемая для компиляции C кода.
CGO_ENABLED
    Поддерживается ли команда cgo. Либо 0, либо 1.
CGO_CFLAGS
    Флаги, которые cgo будет передавать компилятору 
    при компиляции С кода.
CGO_CFLAGS_ALLOW
    Регулярное выражение, указывающее дополнительные флаги, 
    чтобы разрешить им появиться в директивах 
    исходного кода #cgo CFLAGS.
    Не применяется к переменной среды CGO_CFLAGS.
CGO_CFLAGS_DISALLOW
    Регулярное выражение, указывающее флаги, 
    которые должны быть запрещены
    от появления в директивах #cgo CFLAGS исходного кода.
    Не применяется к переменной среды CGO_CFLAGS.
CGO_CPPFLAGS, CGO_CPPFLAGS_ALLOW, CGO_CPPFLAGS_DISALLOW
    Как CGO_CFLAGS, CGO_CFLAGS_ALLOW и CGO_CFLAGS_DISALLOW,
    но для препроцессора C.
CGO_CXXFLAGS, CGO_CXXFLAGS_ALLOW, CGO_CXXFLAGS_DISALLOW
    Как CGO_CFLAGS, CGO_CFLAGS_ALLOW и CGO_CFLAGS_DISALLOW,
    но для компилятора C++.
CGO_FFLAGS, CGO_FFLAGS_ALLOW, CGO_FFLAGS_DISALLOW
    Как CGO_CFLAGS, CGO_CFLAGS_ALLOW и CGO_CFLAGS_DISALLOW,
    но для компилятора Фортрана.
CGO_LDFLAGS, CGO_LDFLAGS_ALLOW, CGO_LDFLAGS_DISALLOW
    Как CGO_CFLAGS, CGO_CFLAGS_ALLOW и CGO_CFLAGS_DISALLOW,
    но для компоновщика (linker).
CXX
    Команда, используемая для компиляции C++ кода.
PKG_CONFIG
    Путь для pkg-config интрумента.
AR
    Команда, используемая для управления 
    библиотечными архивами, когда
    идет сборка с помощью компилятора gccgo.
    По умолчанию равна 'ar'.

Архитектурно-зависимые переменные среды:

GOARM
    Для GOARCH=arm - архитектура ARM, 
    для которой нужно скомпилировать.
    Допустимые значения: 5, 6, 7.
GO386
    Для GOARCH=386 - набор команд с плавающей запятой.
    Допустимые значения: 387, sse2.
GOMIPS
    Для GOARCH=mips{,le}, использовать ли инструкции 
    с плавающей запятой.
    Допустимые значения: 
    hardfloat (по умолчанию), softfloat.
GOMIPS64
    Для GOARCH = mips64{,le}, использовать ли инструкции 
    с плавающей запятой.
    Допустимые значения: 
    hardfloat (по умолчанию), softfloat.

Переменные среды специального назначения:

GCCGOTOOLDIR
    Если установлено, где найти инструменты gccgo, 
    такие как cgo.
    Значение по умолчанию основано на том, 
    как был настроен gccgo.
GOROOT_FINAL
    Корень установленного дерева Go, когда он
    установлен в месте, отличном от того, где он собран.
    Имена файлов в следах стека (stack traces) 
    переписываются из GOROOT в GOROOT_FINAL.
GO_EXTLINK_ENABLED
    Должен ли компоновщик использовать режим внешней ссылки
    при использовании -linkmode=auto с кодом, 
    который использует cgo.
    Установите 0, чтобы отключить режим внешней ссылки, 
    1, чтобы включить его.
GIT_ALLOW_PROTOCOL
    Определено Git. Список схем, разделенных двоеточиями, 
    которые разрешено использовать с git fetch/clone.
    Если установлено, любая схема, не упомянутая явно, 
    будет считается небезопасной для 'go get'.

Дополнительная информация, доступная из 'go env', но не считываемая из среды:

GOEXE
    Суффикс имени исполняемого файла 
    (".exe" в Windows, "" в других системах).
GOHOSTARCH
    Архитектура (GOARCH) исполняемых файлов Go.
GOHOSTOS
    Операционная система (GOOS) исполняемых файлов Go.
GOMOD
    Абсолютный путь к go.mod основного модуля,
    или пустая строка, если не используются модули.
GOTOOLDIR
    Каталог, в котором установлены инструменты go 
    (compile, cover, doc и т.д.).


Читайте также:


вторник, 2 июля 2019 г.

Вспомогательные темы инструмента go: кеширование сборки и тестирования

go help cache

Команда go кэширует выходные данные сборки (build output) для повторного использования в будущих сборках. Расположение по умолчанию для данных кэша - это подкаталог go-build в стандартном каталоге кэша пользователя для текущей операционной системы. Установка переменной среды GOCACHE переопределяет это значение по умолчанию, а запуск 'go env GOCACHE' печатает текущий каталог кэша.

Команда go периодически удаляет кэшированные данные, которые недавно не использовались. Запуск 'go clean -cache' удаляет все кэшированные данные.

Кэш сборки правильно учитывает изменения в исходных файлах Go, компиляторах, параметрах компилятора и т.д.: явная очистка кэша не обязательна при обычном использовании. Однако кэш сборки не обнаруживает изменений в библиотеках C, импортированных с помощью cgo. Если вы внесли изменения в библиотеки C в вашей системе, вам нужно будет явно очистить кеш или использовать флаг сборки -a (см. go help build), чтобы принудительно перестроить пакеты, которые зависят от обновленных библиотек C.

Команда go также кэширует успешные результаты тестирования пакета. Смотрите подробности в go help test. Запуск 'go clean -testcache' удаляет все кэшированные результаты теста (но не кэшированные результаты сборки).

Переменная среды GODEBUG может разрешить печать отладочной информации о состоянии кэша:

GODEBUG=gocacheverify=1 заставляет команду go обходить использование любых записей кэша, а вместо этого перестраивать все и проверять, соответствуют ли результаты существующим записям кэша.

GODEBUG=gocachehash=1 заставляет команду go печатать входные данные для всех хэшей содержимого, которые она использует для создания ключей поиска в кэше. Вывод объемный, но может быть полезен для отладки кеша.

GODEBUG=gocachetest=1 заставляет команду go выводить подробности своих решений о том, следует ли повторно использовать кэшированный результат теста.


Читайте также:


Вспомогательные темы инструмента go: вызовы между Go и C

go help c

Существует два разных способа вызова между кодом Go и кодом C/C++.

Первым является инструмент cgo, который является частью дистрибутива Go. Информацию о том, как его использовать, смотрите в документации по cgo (go doc cmd/cgo).

Вторая - это программа SWIG, которая является общим инструментом для взаимодействия между языками. Для получения информации о SWIG см. http://swig.org. При запуске go build любой файл с расширением .swig будет передан SWIG. Любой файл с расширением .swigcxx будет передан SWIG с параметром -c++.

Когда используется cgo или SWIG, go build передает любые файлы .c, .m, .s или .S компилятору C, а любые файлы .cc, .cpp, .cxx компилятору C++. Переменные окружения CC или CXX могут быть установлены для определения, соответственно, используемого компилятора C или C++.


Читайте также:


Вспомогательные темы инструмента go: режимы сборки

go help buildmode

Команды 'go build' и 'go install' принимают аргумент -buildmode, который указывает, какой тип объектного файла должен быть собран. В настоящее время поддерживаются следующие значения:


-buildmode=archive

Собрать перечисленные неосновные пакеты в .a файлы. Пакеты названные main игнорируются.


-buildmode=c-archive

Собрать указанный основной пакет, а также все пакеты, которые он импортирует, в C архивный файл. Единственными вызываемыми символами будут функции, которые экспортируются с использованием cgo //export комментариев. Требует чтобы ровно один основной (main) пакет был в переданном списке.


-buildmode=c-shared

Собрать указанный основной пакет, а также все пакеты, которые он импортирует, в C общую библиотеку (shared library). Единственными вызываемыми символами будут функции, которые экспортируются с использованием cgo //export комментариев. Требует чтобы ровно один основной (main) пакет был в переданном списке.


-buildmode=default

Перечисленные основные пакеты встроены в исполняемые файлы и перечисленные неосновные пакеты встроены в .a файлы (поведение по умолчанию).


-buildmode=shared

Объединить все перечисленные неосновные пакеты в одну общую (shared) библиотеку, которая будет использоваться при сборке с -linkshared опцией. Пакеты с именем main игнорируются.


-buildmode=exe

Собрать перечисленные основные пакеты и все, что они импортируют в исполняемые файлы. Пакеты без имени main игнорируются.


-buildmode=pie

Собрать перечисленные основные пакеты и все, что они импортируют в позиционные независимые исполняемые файлы (PIE). Пакеты без имени main игнорируются.


-buildmode=plugin

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


Читайте также:


понедельник, 1 июля 2019 г.

Команды go: go vet, сообщить о возможных ошибках в пакетах

Использование:

go vet [-n] [-x] [-vettool prog] [build flags] [vet flags] [packages]

vet запускает команду go vet для пакетов, названных путями импорта.

Для получения дополнительной информации о vet и его флагах см. go doc cmd/vet. Подробнее об указании пакетов см. go help packages. Список проверок и их флагов см. go tool vet help. Для получения подробной информации о конкретном контролере, таком как 'printf', смотрите go tool vet help printf.

Флаг -n печатает команды, которые будут выполнены. Флаг -x печатает команды по мере их выполнения.

Флаг -vettool=prog выбирает другой инструмент анализа с альтернативными или дополнительными проверками. Например, теневой ('shadow') анализатор может быть построен и запущен с использованием этих команд:

go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
go vet -vettool=$(which shadow)

Флаги сборки (build flags), поддерживаемые go vet, контролируют разрешение и выполнение пакета, например -n, -x, -v, -tags и -toolexec. Для получения дополнительной информации об этих флагах см. go help build.

Смотрите также: go fmt, go fix.


Читайте также:


Команды go: go version, напечатать версию Go

Использование:

go version

version печатает версию Go, как сообщает runtime.Version.


Читайте также:


Команды go: go tool, запустить указанный инструмент go

Использование:

go tool [-n] command [args...]

tool запускает команду go tool, идентифицированную аргументами. Без аргументов выводит список известных инструментов.

Флаг -n заставляет tool напечатать команду, которая будет выполнена, но не выполнит ее.

Подробнее о каждой команде инструмента см. go doc cmd/<command>.


Читайте также: