Как запустить go файл

Обновлено: 03.07.2024

Пару месяцев назад я начал писать на Go так же известным, как Golang. И не только из-за их потрясающего логотипа. Основная причина была в том, что я хотел, чистую железяку на моем Raspberry Pi, а так же кроссплатформенность в паре с легкостью установки. Среди других причин были простота создания на Go асинхронного кода с помощью Go методов и уникальный подход к синхронизации каналов между подпрограммами (потоками) посредствам go routines.

С тех пор, как GO был выпущен в 2012 году, я много читал о нем и что ж, пришло время по-настоящему замарать руки и попробовать использовать его для своих задач.

Однако любопытно, продолжим .

Что же из себя представляет GO?

Go - это опен сорсный язык программирования , который позволяет легко создавать простое, надежное и эффективное программное обеспечение. Разрабатывался он внутри компании Google и на 2018 год уже являлся одним из самых быстроразвивающихся и адаптированных языков программирования. Первый релиз языка появился в марте 2012 года. А не так давно, начиная с выпуска Go 1.11, у него появилась поддержка модулей и управлять зависимостями стало немного удобнее.

Необходимые настройки среды

Для начала нужно все правильно настроить. Есть простой способ установить мою библиотеку с помощью Chocolatey.

В Windows мы используем Chocolatey в Powershell для установки Go и vscode…

С установленным Go и vscode у нас есть все, что нужно для начала.

Так как я использую Git bash на все случаи жизни, я запускаю следующую команду Visual Studio Code из Git Bash, чтобы установить go расширение. Если хотите, вы можете просто установить расширение из самого vscode.

Вот мы и поставили Go расширение в visualstudio, так что теперь у нас есть все для приятного кодинга.

Где найти отличные ресурсы и материалы по GO?

Документацию по Go можно найти здесь. Все пакеты, доступные для использования, можно найти здесь.Кроме того, для того, чтобы заюзать Go или помочь другим программистам с примерами у языка есть онлайн-площадка.

Создаем первый проект

Для того, чтобы начать на Go новый проект, мы сначала создаем пустую папку. Затем мы прописываем в этой папке команду go modules init, чтобы инициализировать модули Go. Модули используются для зависимостей.

Синтаксис

В Go мы определяем функцию, используя ключевое слово func.

То, что других языках обычно бывает классом, в Go является структурой struct. Вы можете определить структуру следующим образом.

Все переменные, функции, структуры, которые начинаются с верхнего регистра в Go являются публичными. А все переменные, функции, структуры, начинающиеся со строчной буквы, являются частными. Кроме того, как вы наверное уже заметили в примере, определения типов идут за именем переменной. Поместив оператор импорта поверх файла вы можете импортировать все необходимые пакеты. И последнее, но не менее важное: каждая программа go должна иметь хотя бы один main пакет.

Этот пакет fmt предоставляет нам несколько полезных функций, например строки шаблонов, которые удобно использовать для построения строки с использованием некоторых переменных.. Более того, в примере мы видим, что возвращаемый тип для функции упоминается в конце ее определения. Более подробно читайте о пакете fmt в документации.

Теперь у нас есть пустой проект, и к тому же мы уже немного знаем о синтаксисе, чтож, начнем! Открываем эту папку в vscode.

Сначала мы добавляем новый файл в нашу папку, называем ее main.go . Затем добавим тот код, который мы рассмотрели выше.

Теперь с помощью этого кода мы можем запустить наше приложение. Используя следующую команду в командной строке.

Можете также прогнать этот код в Go playground.

Тестирование

Чтобы добавить тесты в go, просто добавьте файл main_test.go. Добавим функцию проверяющую метод sayHi. Сигнатура методов тестирования всегда ДОЛЖНА быть TestXxx(t *testing.T). Первый X всегда должен быть в верхнем регистре.

Теперь, чтобы запустить наш тест, мы сделаем в командной строке следующее. Обратите внимание, что я запускаю все тесты из всех файлов и подпапок в моем проекте таким способом ./.

Пожалуйста, не бойтесь пробовать, изменяйте реализацию, и снова запустите тест, чтобы увидеть, как тесты пройдут неудачно. Для запуска с code coverage запустите такие тесты.

Чтобы подробнее ознакомится, пожалуйста, читайте документацию о testing package.

Компилируем и выполняем

Самым простым способом создать исполняемый файл будет:

Это команда создаст нам исполняемый файл Windows, как будто мы на Windows. Вы можете просто вызвать исполняемый файл и увидеть тот же результат, что мы имели при вызове go run main.go. Если мы хотим получить более подробный вывод и посмотреть, что происходит за под капотом, можно использовать -x опцию -в go build. А как нам скомпилировать один и тот же код для Linux или Raspberry Pi?

Чтобы запустить этот бинарник в Linux, не забудьте использовать chmod +x, а затем просто вызвать с помощью ./hello-world

Raspberry Pi 3 имеет архитектуру ARM v7, которую можно скомпилировать следующим образом. ПРИМЕЧАНИЕ: все это мы можем сделать с Windows.

Для запуска бинарника сделайте все то же самое, что и на любом другом компьютере с Linux chmod +x, а затем ./hello-world для запуска вашего приложения.

Резюмируя

Я знаю, что это очень простое приложение и оно не несет практической пользы, но, по крайней мере, вы уже, как минимум, настроили свою среду разработки и приобрели небольшой практический опыт в написании первых строк кода на Go. Вы уже также знаете, как писать тесты. Это будет хорошей основой для написания качественного кода. Более интересные вещи, такие как go routines, я хотел бы оставить для нового поста в блоге.

И последнее, но не менее важное: я хотел бы поделиться с вами своим первым приложением на Go. Это интеграция с термостатом Nest, который я запускаю на своем Raspberry Pi, чтобы собрать данные о температуре и отобразить их в хорошем веб-приложении на React. Только не забудьте зарегистрироваться в рабочем пространстве Gophers Slack.

Go (часто также golang) — компилируемый многопоточный язык программирования, разработанный внутри компании Google.

Разработка Go началась в сентябре 2007 года, его непосредственным проектированием занимались Роберт Гризмер, Роб Пайк и Кен Томпсон, занимавшиеся до этого проектом разработки операционной системы Inferno.

Официально язык был представлен в ноябре 2009 года. На данный момент поддержка официального компилятора, разрабатываемого создателями языка, осуществляется для операционных систем FreeBSD, OpenBSD , Linux , macOS, Windows , DragonFly BSD, Plan 9, Solaris, Android, AIX..

Также Go поддерживается набором компиляторов gcc, существует несколько независимых реализаций. Ведётся разработка второй версии языка.

Комментарии

Форматирование кода

Отступы нужно ставить с помощью табуляции. Не с помощью пробелов.

Пробел или отсутствие табуляции не сломают компиляцию но рекомендовано сообществом

package main import ( "fmt" )

Объявление функции и открывающая фигурная скобка должны быть на одной строке

./prog.go:7:6: missing function body
./prog.go:8:1: syntax error: unexpected semicolon or newline before

Если допустить такую ошибку в песочнице - можно нажать на Format и он выдаст подсказку

prog.go:8:1: unexpected semicolon or newline before

Установка

Про установку в Linux читайте в статье

Команда go

Выполните команду go без аргументов

Пример применения go help doc можете изучить здесь

Настройка Visual Studio Code

Затем нужно установить расширение (Extension) Go.

Rich Go language support for Visual Studio Code

Ctrl + Shift + P

В поиске найдите

Выберите всё и нажмите OK

Запуск скрипта

Рассмотрим скрипт main.go следующего содержания

module

Проекты нужно оформлять в виде модулей.

Желательно сразу называть их так, чтобы было соответствие между проектом и удалённым репозиторием.

С момента изначального написания статьи многое изменилось. Я немного обновил пост, чтобы в сети не висела устаревшая инструкция.

Вместо вступления

Установка Go

Workspace

Теперь необходимо создать папку, которая будет чем-то вроде корневой рабочей директории. В составе дистрибутива Go идет утилита «go», которая «все в одном» — она используется для сборки проектов, для установки сторонник библиотек, для запуска тестов и т.п. Используется парадигма Convention over Configuration. Единственная настройка, которую нужно сделать — это добавить переменную среды GOPATH, в которой указать корневую папку, где у нас будут хранится все исходники наших и сторонних проектов, скомпилированные библиотеки и исполняемые файлы. Создаем такую папку: C:\gopath и добавляем переменную среды:


Также нужно добавить %GOPATH%\bin в перменную среды PATH.


Установка IDE

Hello World

В последней версии GoLangIDE, аналог IntelliSense (GoCode) уже встроен и ничего дополнительно устанавливать не нужно. Поэтому сразу приступаем к делу:
Запускаем IDE, создаем новый проект (Ctrl+N):


Пишем fmt, ставим точку – видим выпадающий список функций.


Выбираем функцию (жмем Tab) — можно вводить параметры функции, жмем F1 — видим подсказку с сигнатурой функции.


Компилируем наш Hello World: Ctrl + B
Запускаем в отдельном окне консоли: Ctrl + Shift + F5

Традиционно первая программа, с которой начинается изучение любого языка программирования, называется «Hello World» — эта программа просто выводит в консоль строку Hello World . Давайте напишем её с помощью Go.

Сначала создадим новую директорию, в которой будем хранить нашу программу. Установщик, о котором говорилось в первой главе, создал в вашей домашней директории каталог Go . Теперь создайте директорию под названием

означает вашу домашнюю директорию). Вы можете сделать это из терминала с помощью следующих команд:

Используя текстовый редактор, введите следующее:

Убедитесь, что содержимое файла идентично показанному здесь примеру, и сохраните его под именем main.go в созданной ранее директории. Затем откройте новое окно терминала и введите:

Как читать программу на Go

Теперь давайте рассмотрим программу более детально. Программы на Go читаются сверху вниз, слева направо (как книга). Первая строка гласит:

Это называется «определением пакета». Любая Go программа должна начинаться с определения имени пакета. Пакеты — это подход Go к организации и повторному использованию кода. Есть два типа программ на Go: исполняемые файлы и разделяемые библиотеки. Исполняемые файлы являются видом программ, которые можно запустить прямо из терминала (в Windows их имя заканчивается на .exe ). Библиотеки являются коллекциями кода, который можно использовать из других программ. Детальнее мы будем рассматривать библиотеки чуть позже, а пока просто не забудьте включать эту строку в программы, которые вы пишете.

Далее следует пустая строка. Компьютер представляет новые строки специальным символом (или несколькими символами). Символы новой строки, пробелы и символы табуляции называются разделителями. Go не обращает на них внимания, но мы используем их, чтобы облегчить себе чтение программы (вы можете удалить эту строку и убедиться, что программа ведет себя в точности как раньше).

Дальше следует это:

Ключевое слово import позволяет подключить сторонние пакеты для использования их функциональности в нашей программе. Пакет fmt (сокращение от format) реализует форматирование для входных и выходных данных. Учитывая то, что мы только что узнали о пакетах, как вы думаете, что будет содержаться в верхней части файлов пакета fmt ?

Обратите внимание, что fmt взят в двойные кавычки. Использование двойных кавычек называется «строковым литералом», который в свою очередь является видом «выражения». Строки в Go представляют собой набор символов (букв, чисел, …) определенной длины. Строки мы рассмотрим детально в следующей главе, а сейчас главное иметь в виду, что за открывающим символом " в конечном итоге должен последовать и закрывающий. Всё, что находится между ними, будет являться строкой (символ " сам по себе не является частью строки).

Строка, начинающаяся с // , является комментарием. Комментарии игнорируются компилятором Go и служат пояснениями исключительно для вас (или для тех, кто будет потом читать ваш код). Go поддерживает два вида комментариев: // превращает в комментарий весь текст до конца строки и /* */ , где комментарием является всё, что содержится между символами * (включая переносы строк).

Далее можно увидеть объявление функции:

Функции являются кирпичиками программы на Go. Они имеют входы, выходы и ряд действий, называемых операторами, расположенных в определенном порядке. Любая функция начинается с ключевого слова func за которым следуют: имя функции (в нашем случае main ), список из нуля и более параметров в круглых скобках, возвращаемый тип (если есть) и само «тело», заключенное в фигурные скобки. Наша функция не имеет входных параметров, ничего не возвращает и содержит всего один оператор. Имя main является особенным, эта функция будет вызываться сама при запуске программы.

Заключительной частью нашей программы является эта строка:

Этот оператор содержит три части: доступ к функции пакета fmt под названием Println (Print line), затем создание новой строки, содержащей Hello World , и вызов функции с этой строкой в качестве первого и единственного аргумента.

На данный момент вы уже можете быть немного перегружены количеством новых терминов. Иногда полезно не спеша прочесть вашу программу вслух. Программу, которую мы только что написали, можно прочитать следующим образом:

Создать новую исполняемую программу, которая использует библиотеку fmt и содержит функцию main . Эта функция не имеет аргументов, ничего не возвращает и делает следующее: использует функцию Println из библиотеки fmt и вызывает её, передавая один аргумент — строку Hello World .

Функция Println выполняет основную работу в этой программе. Вы можете узнать о ней больше, набрав в терминале команду:

Среди прочей информации вы должны увидеть это:

Сейчас документация говорит нам, что вызов Println пошлет передаваемые ей данные на стандартный вывод — терминал, вы сейчас работаете в нём. Эта функция является причиной, по которой Hello World отображается на экране.

В следующей главе вы поймете, каким образом Go хранит и представляет вещи вроде Hello World с помощью типов.

Задачи

Что такое разделитель?

Что такое комментарий? Назовите два способа записи комментариев.

Наша программа начиналась с package main . С чего начинаются файлы в пакете fmt ?

Мы использовали функцию Println из пакета fmt . Если бы мы хотели использовать функцию Exit из пакета os , что бы для этого потребовалось сделать?

Измените написанную программу так, чтобы вместо Hello World она выводила Hello, my name is вместе с вашем именем.

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