Go - установка, сборка
Last updated
Was this helpful?
Last updated
Was this helpful?
Поверите ли, нет ничего проще установки компонентов Go на ваш компьютер (не считая, разве что, .NET Framework 4.6, который и так является неотъемлемой частью Windows 10 (если вы, конечно, пользуетесь Win PC).
Качают Go вот здесь:
Не утрудим себя изучением архивных версий и угрожающего сонмища тарболлов для них, в сразу обратим внимание на раздел "Featured downloads", где нам предлагают MSI-ник для Windows. стандартный pkg файл для OS X, тёплый ламповый tarboll для Linux и, конечно, сырцы для установки на малоюзабельные оси и прочих гиков и импровизаторов. Что до деталей, то там, как говорится, всё написано. Ищущий да обрящет.
Впрочем, позволю себе сделать ряд заметок:
Актуальная языка на момент написания книги - go version go1.13.1 windows/amd64
Для PC - совместимых машин поддерживается только x86-64 (она же AMD64) архитектура. Младшая поддерживаемая версия - Windows 7. В прочих же аспектах установка сведётся к знакомому "nextr-next-next". В случае обновления старая версия будет удалена.
Для Linux настоятельно порекомендую использовать "комплектные" дистрибутивы и устанавливать Go через apt, yum, zypper или что у вас там под рукой. Конечно, встав на этот путь, вы не получите у себя в системе распоследних версий Go, зато избавите себя от всех прелестей красноглазия при настройке среды окружения Go и CGO.
К сожалению, версионность дистрибутивных версий Go в OS Linux чаще всего отстаёт от актуальной ветки. К примеру, в ОС Ubuntu 18.04.3 LTS дистрибутивная версия Go = go version go1.10.4 linux/amd64. Однако автоар всячески не рекомендует собирать среду разработки из исходников, кроме тех случаев, когда вы точно знаете что и для чего вы делаете. В практике автора, при кроссплатформенном компилировании, ни разу не возникало проблем с различием версионности, что наводит на мысль, что такие коллизии являются достаточно редкими на практике явлениями. Однако, используя языковые новинки, нельзя забывать об осторожности.
Не смотря на ориентацию на новейшую платформу x86-64, данный факт не означает запрета на сборку 32 -битных приложений, а также выполнения их на системах более младших версий, чем те, на которые может быть установлен сам компилятор. Так, мы вполне можем собрать 32-битный PE файл для Windows XP.
Go для OS X - вообще золотое дно, отдых души, песнь песен... Ибо нормальных сишных компиляторов погрузить забыли, и оно вроде как и Uniх, а смейкать что-нибудь увольте-с. К счастью, Go решает данную задачу, по крайней мере частично.
Собрать что либо в Go не просто, а очень просто. Если вы "would be so kind", поработаем пока что под виндой);
"Главный" файл обычно именуется main.go. Имя пакета главного файла также задаётся "package main" (см. главу "!")
go run main.go - только выполнить, не собирать.
go build main.go - собираем, не выполняем. Имя полученного файла будет main.exe
Для смены архитектуры пишем set goarch=386 и вуаля, мы имеем 32bit PE экзешник.
export GOARCH=386, соответственно, если мы в *nix системе.
Однако наш файлик вышел весом как-то тяжеловат... И это для хеллоу-то ворлда! Тут и мир не перевернёшь, даже если точку точку опоры дадут. И здесь я снова рискую и забегаю вперёд. Не заведено в учебной и справочной литературе сразу нагружать читателя. Читатель - он существо нежное, а учебник штука нудная. Чтение для развлечения - это отдых для ума и тела, а учебники читать - это труд, причём вовсе неоплачиваемый. Здесь главное читателя не спугнуть!
Сейчас открою вам одну большую тайну. Тольлко т-ссс, никому! Go в ранних версиях вовсе не разрабатывался под Windows (как, впрочем, и С), и посему ветка Windows какое-то время была "догоняющей". Зато в неё перешло множество сишных инструментов, к примеру LD флаги.
go build -ldflags "-s -w" main.go
Вуаля, наш файлик похудел!
Что мы сделали? Мы избавились от дебаговой информации.
А именно:
Omit the symbol table and debug information; Omit the DWARF symbol table
Что сие такое и для чего нужно - просторы Википедии вам в помощь. От себя лишь отмечу, что использование данных флагов позволяет не только изрядно уменьшить размеры вашего продукта, но и сокрыть от чужих глаз часть информации о его внутренней структуре как бинарного файла.
Если вы думаете что "это всё", то вы очень и очень ошибётесь. У меня есть ещё пару тузов в рукаве. Файл должен быть какой? Правильно, верно оформленным. То есть (здравствуй, С) , он должен иметь ресурсы.То бишь нейм, номер билда, и иконку (можно даже красивую, я не буду против).
main.exe.manifest
main.rc:
main-res.syso:
Формат *.ICO почти аналогичен формату CUR (Windows cursors), предназначенному для хранения курсоров. Создание подобных изображений не составит для вас никакой трудности, ибо для этого существует огромное количество программ и бесплатных онлайн сервисов.
И ещё. Скорее всего вы захотите неким образом именовать ваши билды и вести версионность. Да не просто абы как, а автоматически. Я готов это сделать для вас! Непринуждённым движением руки меняем текст программы:
Содержимое каталога построения программы(с учётом приобретённых знаний):
Остаётся только подытожить всё сказанное командой сборки ПО:
windres -o main-res.syso main.rc && go build -ldflags "-s -w -X main.buildVer=%DATE%" -i
В итоге мы получаем готовую программу с ресурсами, значком и версией сборки. Вот результат работы данного ПО:
Разумеется, подобное обогащение файла ресурсами касается только Windows. Если вы собираете для другой платформы, данные манипуляции излишни. Версионность же при сборке можно указывать всегда. Потребуется лишь немного адаптировать команду сборки ПО к используемой при сборке ОС. Для Linux, к примеру, это может выглядеть так:
go build -ldflags '-s -w -X main.buildVer='$(date '+%d%m%Y')
Результат выполнения под Linux:
Вообще, если вы планируете собирать для Windows из-под Linux или OsX, и хотите использовать при этом ресурсы, вам нужно будет тщательно проработать этот вопрос.
Как мог бы для себя отметить любознательный читатель, рассказ даже о таких базовых вещах, о которых мы до сей поры вели беседу, долог и таит много нового и и интересного.
Что же, я надеюсь, что теперь уж тема "хелоуворлда" действительно раскрыта.
Для того, чтобы этого добиться , нам понадобится GNU`тая утилита windres (можно вытянуть из ), а также файлы (содержание приблизительное):
Файл, сочетающий в себе как бинарные так и текстовые данные
А также иконка приложения